如何从媒体播放器计算振幅的分贝(dB)?
我有一个代码来计算Audiorecord的实时DB振幅.该代码在计算数据库振幅中效果很好.录制后,我将其保存到WAV文件.现在,我想播放该文件并重新计算数据库振幅.但是,我之前无法取得类似的结果.您能帮我解决它吗?这是我在录制和播放时计算数据库幅度的代码. 1.录制时插入db振幅 bufferSize = AudioRecord.getMinBufferSize(16000, AudioFormat.CHANNEL_IN_MONO, AudioFormat.ENCODING_PCM_16BIT); record = new AudioRecord(MediaRecorder.AudioSource.VOICE_COMMUNICATION, SAMPLE_RATE, AudioFormat.CHANNEL_IN_MONO, AudioFormat.ENCODING_PCM_16BIT, bufferSize); audioBuff
0 2024-02-17
编程技术问答社区
在安卓系统中使用加速度计计算步数
可能的重复: 如何使用加速度计 是否有任何众所周知的算法计算基于加速度计的步骤? 嗨,我已经开发了Android应用程序.在一个模块中,我必须创建一个有人知道如何实现我的目标吗?任何帮助都将不胜感激. 解决方案 最简单的解决方案是拥有一个时间窗口和许多阈值.该信号获得了双波的形式,您可以将步骤分为几个部分.您可能需要有几个窗口和相应的阈值值才能识别一个步骤.但是请记住,如果某人在楼上/楼下或跑步或只是以不同的速度行走,此信号将会改变.如果您实际上要与几个参与者一起尝试,您将获得很大的可变性. 设备之间的阈值值将大不相同.测量频率也将产生影响.允许以正常速度检测步行的标准频率约为10Hz,一些设备使用20Hz,如果您浏览此功能,您将获得很多数据和很少的信息.制造商确实使用了不同版本的加速度计,因此,如果您的软件在一部手机上使用,则无法保证它甚至可以在同一型号的另一个设备上使用. 我将首先绘制您的信号.还不要忘记手机可以在口袋中的不同位置(除非您以某种方式修复)
2 2024-02-09
编程技术问答社区
混合两个16位编码的立体声PCM样本,在产生的音频中造成噪音和失真。
我从两个来源获得了两个不同的音频样本. 对于麦克风声: audioRecord = new AudioRecord(MediaRecorder.AudioSource.DEFAULT, 44100, AudioFormat.CHANNEL_IN_STEREO, AudioFormat.ENCODING_PCM_16BIT, (AudioRecord.getMinBufferSize(44100, AudioFormat.CHANNEL_IN_STEREO, AudioFormat.ENCODING_PCM_16BIT)*5)); 对于内部声音: audioRecord = new AudioRecord.Builder() .setAudioPlaybackCaptureConfig(config) .setAudioFormat(new Audi
4 2024-02-07
编程技术问答社区
如何校准Android设备的麦克风
我正在研究一个研究项目,该项目涉及使用Android设备记录社区噪声滋扰,以执行一些复杂的数字信号处理分析并计算一些指标. 我的主管指示我在将其分发在社区中之前对Android设备的麦克风进行校准.我想知道是否有一种程序化的方式. 为什么要进行校准? Android设备的麦克风灵敏度可能与其他设备不同.即使是同一家公司的制造商也无法对其敏感性发表评论. 因此,很有可能,一个Android设备可以在60 dB处记录声音,而另一个设备可能会在相同的环境和条件下同时记录70 dB的声音. 我正在考虑以下几行 - >在一个相当的环境中进行录制,然后在嘈杂的环境中进行录制.可以根据需要调整增益.我仍然不清楚. 是否有任何程序化方法? 对此的任何帮助将不胜感激. 解决方案 进行了一些研究后,我终于找到了一种校准Android手机麦克风灵敏度的方法. 下面给出的是使用Android类Mediarecorder生成振幅作为DB值的代码. im
2 2024-02-05
编程技术问答社区
用于安卓的 "频移键控 "解码器
我正在尝试通过Android设备的音频端口传输一些数据,我正在使用FSK(频移键)我使用两个不同的频率来表示1和0. FSK是否有任何Android库或示例代码解码捕获的音频数据? 解决方案 您可能需要查看此 在P/Audio-Analyzer-for-android/source/browse/readme 一般提示: 确保应用窗口功能. 选择一个样品频率,该频率使FFT变换击中您的两个频率,并尽可能少.
0 2024-02-05
编程技术问答社区
用超声波确定2个移动设备的相对位置
我正在考虑使用超声(听不清)作为确定2个移动设备(可以在Android或iOS设备上)的相对位置的选项.这两个设备都将安装我的应用程序.它的用户将彼此面对面(最大距离为1,5 m),将设备互相面对. 我想知道是否可以创建一个高效的系统,其中一个应用程序会在其中发送超声/听不清的信号,而其他用户的应用程序会接收它,并确定该特定用户(站立非常接近)已发送它(发出声音). 注意:就我而言,声音可以听到,但是听到的声音越少,越好(因此,我使用了"超声"一词.此时,这种应用的电池消耗并不重要(尽管我会感谢任何信息).我只想知道是否可能以及这种应用的效率.我也想发送(如果可能的话)几个字节的信息,但是该系统也应在存在某些环境噪声的地方工作. 任何人都可以回答有关此主题的问题/分享经验吗? 解决方案 请参见相关问题:​​使用超声转移数据 我绝对认为这是可能的. 作为起点,我会看 wikipedia page 用于其传输方法.您将在软件音频处理代码中应用其处理概念.
0 2024-02-05
编程技术问答社区
如何在Android中实现输入音频的IIR带通滤波器
如何在当前的Android代码中实现IIR带通滤波器?我有一个可以记录音频(实际频率)并将其保存在.wav文件中的Android应用程序. 我设法在线找到了IIR过滤器库,但我不确定如何将其实现到我的代码中. 我应该在将接收的声音信号输出到.wav文件之前将18K-20K带通滤波器添加到代码中. 我当前的代码 package com.example.audio; import ddf.minim.effects.*; import java.io.BufferedInputStream; import java.io.BufferedOutputStream; import java.io.DataInputStream; import java.io.DataOutputStream; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundExcep
2 2024-02-04
编程技术问答社区
如果快速卷积需要LPF,我如何使用基于FFT的快速卷积来实现LPF?
我是一位经验丰富的软件工程师,具有一些小型大学DSP知识.我正在研究智能手机应用程序来处理信号数据,例如从麦克风(以44100 Hz采样)和加速度计(以32-50 Hz采样).我的应用程序将是俯仰探测器等. 我想在手机上实现低通滤波器(LPF),以删除别名频率,尤其是对于加速度计的频率,该加速度计的采样率较低. 但是,我在尝试应用基于快速FFT的卷积方法时,我会发现矛盾.任何帮助将不胜感激. 这是我的推理线: 我正在阅读一个信号,我想使用LPF进行反缩减(删除别名频率). 要在智能手机上实现LPF,我选择将FIR滤波器(即窗口的SINC函数)应用于时间域信号.令x [n]为我的信号,而f [n]为我的滤镜内核的系数.因此,我想在x [n]和f [n]之间执行卷积,其中x [n]的长度为n(通常为512),f [n]长度为m(通常为256). 我在智能手机(Android和iPhone)上实现了一个简单的1D卷积.该算法是典型的嵌套循环版本并在O(n m)中运
4 2024-02-04
编程技术问答社区
需要相当于Android的AudioInputStream
我正在尝试编写一个Android应用程序,该应用程序分析了用户音乐库中的内容.让我们假设这些是SD驱动器上的MP3文件,用于初学者.我能够找到可以分析音乐文件的Java算法,但是我找不到读取和解码文件的API(不播放它们.有一个播放文件的API,甚至是用于音频效果的类,但是我不喜欢't看到应用程序从音乐文件中获取解码数据的任何方法.我可以从麦克风中阅读. J2SE具有audoinputstream类,但它不是Android的一部分.有什么建议吗? 解决方案 我的真正目的是能够查看我的Android音乐库中的文件,并按Tempo对它们进行分类.我一直在寻找库来解决这个问题,但是我遇到了一项名为
2 2024-02-04
编程技术问答社区
使用超声传输数据
Yamaha Infosound 和 shopkick应用程序使用允许使用超声传输数据的技术.那是播放一个听不清的信号(> 18kHz),可以被现代手机(ios,android)拾取. 此类技术中使用的方法是什么?他们使用哪种调制? 解决方案 我看到了这种方法的几个问题.首先,18kHz是不是听不清的.许多人听不到,尤其是随着年龄的增长,但我知道我当然可以(我进行定期听力测试,与工作有关).此外,大多数手机的 a/d Converters 和许多许多手机都具有不同的低通滤波器设备,尤其是较旧的Android(我个人看到这种情况),过滤了以下16 kHz左右的所有内容.因此,不能保证您的应用程序可以在任何硬件上使用. iPhone应该可以做到. 在调制方面,这可能是什么,但是我肯定会排除AM.在音量方面,声音几乎具有零鲁棒性.如果我要实施这样的事情,我会选择 fsk .我认为 psk 会因声学反射等而失败.困难在于,您在非常狭窄的带宽内处理非舒适能量转移.我当然不怀疑它
2 2024-02-03
编程技术问答社区
用FFT计算声音输入的频率
我的应用.在rpm中显示输入声的峰值频率.我有一系列双打包含时域中的样本. audioRecord.read(buffer, 0, 1024); 然后我在它上做了FFT. transformer.ft(toTransform); 使用此类在这里 然后,我得到了FFT的结果的最大幅度 的结果 //块大小= 1024 double magnitude[] = new double[blockSize / 2]; for (int i = 0; i
8 2024-02-01
编程技术问答社区
从乐器中提取音频频率,找到一个音符
我正在尝试开发一个从仪器中提取音频频率的Android应用程序.我使用Jtransforms的快速傅立叶变换方法.这是我到目前为止所拥有的: public class MainActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); new readFrequencies().execute(); } @Override public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu; this adds items to the action bar if it is present. get
4 2024-02-01
编程技术问答社区
安卓系统中的声音转换为频率
可能的重复: 实时音高检测 我正在开发自己的Android吉他调谐器.在这里,我将不得不使用吉他音符频率.因此,我想知道如何将通过麦克风端口的声音转换为Android中的频率? 解决方案 编辑:链接死亡-----这个问题已经解决了在这里 --- 我将总结论文: 记录的东西: int minSize = AudioRecord.getMinBufferSize(sampleRate,AudioFormat. CHANNEL_CONFIGURATION_MONO, AudioFormat.ENCODING_PCM_16BIT); AudioRecord audioInput = new AudioRecord(MediaRecorder.AudioSource.MIC, sampleRate, AudioFormat.CHANNEL_CONFIGURATION_MONO, AudioFormat.ENCODIN
2 2024-02-01
编程技术问答社区
在安卓系统上实时改变轨道的播放速率
我想知道是否有人知道一个实时更改轨道播放率的库.我的想法是加载轨道并将其播放率更改为一半或两倍.首先,我尝试了音乐播放器,但根本不可能,然后我尝试了Soundpool.问题在于,借助轨道加载轨道后,我无法更改速率.这是我正在使用的代码(概念证明): float j = 1; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); Button b = (Button)findViewById(R.id.Button01); b.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { j
0 2024-02-01
编程技术问答社区
安卓音频:改变音调
Soundpool的Android文档说:"应用程序还可以通过实时调整多普勒或合成效果的播放率来改变音高".因此,我尝试使用固定方法从一个音符到另一个音符的平稳方法来做到这一点,但是结果很糟糕:声音变化非常破烂.这是我尝试的代码.请告诉我是否有更好的方法. int streamId = soundPool.play (soundId, 1, 1, 1, 0, 1.0f); for (float x = 0; x
0 2024-01-31
编程技术问答社区
我在我的智能手机上每秒能做多少次FFT? (用于进行语音识别)
我正在探索语音识别和DSP,因此我想在智能手机上实现一个简单的音频分析仪(我既有iPhone又有三星Nexus的运行Android).我以前已经在MATLAB中完成了基本DSP. 从我的理解中,我需要执行FFT以获取信号的基本频率. 所以,现在,我想以44100 Hz的方式对麦克风进行采样.如果我使用带有50%重叠的样本量512的滑动窗口,这意味着我需要每256个样本或0.00580秒进行FFT. 这个速度似乎确实很高,特别是如果我在Java为Android编程.我的智能手机能够处理这种速度吗?我知道您可以在Android上以C/C ++进行编程,但是我想暂时与Java保持它. 解决方案 执行真实的复合FFT需要〜5/2 N LG N浮点操作(加法和乘法).在您的情况下,n = 512,所以: flops per fft ~= (5/2) * 512 * 9 = 11520 因此,每秒172个FFT需要每秒约200万个浮点操作.听起来很多,但实际上并不
4 2024-01-31
编程技术问答社区
安卓音频记录的设置来记录通话
我使用Audiorecord类在通话过程中记录声音. 我只想记录拥有手机的人的声音(来自麦克风). 在录制过程中,我想进行一些音频处理,但这是现在的. Android具有以下AudioSources选项: Mediarecorder.audiosource.voice_call Mediarecorder.audiosource.mic Mediarecorder.audiosource.voice_uplink mediarecorder.audiosource.voice_downlink 您可以解释它们之间有什么区别.好的麦克风很明显,但是 Voice_call vs voice_uplink vs voice_downlink? 我也应该选择一个样本率(8000Hz,16000Hz,2250Hz,44100Hz).您能告诉我选择什么样本率,为什么? 对于音频格式,我选择了audioformat.encoding_pcm_16bit 但它也
4 2024-01-31
编程技术问答社区
对一个音频信号实施高通滤波器
我能够编写一个程序来捕获音频信号,删除背景噪声,应用窗口功能和可视化信号.我的程序到目前为止正在努力,没有错误.现在,我正在尝试将高通过滤器实现到我的代码.我已经找到了这部分的API.但是我无法根据我的代码应用.这是我的代码: private class RecordAudio extends AsyncTask { @Override protected Void doInBackground(Void... params) { started = true; try { DataOutputStream dos = new DataOutputStream( new BufferedOutputStream(new FileOutputStream( recording
2 2024-01-30
编程技术问答社区
安卓指南针方向不可靠(低通滤波器)。
im创建一个应用程序,在其中我需要根据设备的方向定位图像视图. 我使用来自磁场和加速度计传感器的值来计算 的设备方向 SensorManager.getRotationMatrix(rotationMatrix, null, accelerometerValues, magneticFieldValues) SensorManager.getOrientation(rotationMatrix, values); double degrees = Math.toDegrees(values[0]); 我的问题是,图像视图的定位对方向的变化非常敏感.使ImageView不断在屏幕周围跳跃. (因为学位变化) 我读到这可能是因为我的设备接近可能影响磁场读数的事物.但这不是看起来唯一的原因. 我尝试下载一些应用程序,发现" > 3D Compass "和" Compass 读数(设置噪声过滤器时)保持非常稳定,我希望在应用程序中采用相同的行为. 我读到我可以通过添加"
4 2024-01-29
编程技术问答社区
Android 2.3展示台-对getFft()的理解出现问题
第一次在这里,很抱歉任何屠宰格式提前. 所以我是DSP的新手,因此我对傅立叶变换只有非常一般的了解.我正在尝试为Android SDK 9构建可视化器应用程序,其中包括Android.media.audiofx中的可视化器类. 方法getfft()的Javadoc,这是我使用的状态: "返回的频率捕获 目前播放音频内容.这 捕获是8位幅度的FFT.笔记 FFT的大小是一半 指定的捕获尺寸,但两者都 频谱的侧面返回 屈服以等于 捕获大小." 首先,"光谱的两侧"是什么意思?此输出与标准FFT有何不同? 这是字节阵列的一些示例输出,Getfft()得到124点以保持简单,我抓住了第一个31个垃圾箱.这是前31个垃圾箱的幅度: {123, -2, -23, -3, 6, -16, 15, -10, -8, -12, 9, -9, 17, -6, -18, -22, -8, 4, -5, -2, 10, -3, -11, 3, -4, -11, -8, 15, 16
0 2024-01-28
编程技术问答社区