我想将16位pcm音频下采样到8位,然后在android中将相同的音频从8位上采样回到16位。我正在使用这似乎有效:inttempint;for(inti=1,j=0;i"+j+"BUFFERVALUE->"+tempBuffer[j]+"*-----------");}其中tempbuffer是一个short[],tempint是一个int。任何人都可以告诉我这是否工作正常,因为我是初学者,而且我正在使用它来将字节[]转换回短[]for(intx=1,j=0;x我不确定它是否有效。 最佳答案 假设8位和16位音频都是带符号的PCM
我使用eclipse和androidsdk4.0.3apilvl15创建一个基本的音乐播放器应用程序。我看了看,发现主要有两个类可以播放声音。媒体播放器和声音池。SoundPool在声音优先级和播放声音速率方面具有更大的灵active。我还想画一个音频的可视化图。有没有办法从加载的音频Assets中获取原始PCM数据,以便我能够绘制图形?有没有办法在实时播放原始数据之前对其进行操作?例如,如果我想添加实时效果。这些类(class)可能吗?还是其他?我想使用其中一个类的主要原因是它们可以读取音频格式,而无需我自己读取文件并将格式解析为原始PCM数据。如能提供有关此问题的任何信息,我们将不
编辑了我的问题:是否有从PCM原始数据到任何音频文件的编码器?mp3,ogg...但不是WAV,因为它太大了我有一个包含原始PCM数组的文本文件,我想将其转换为mp3、ogg文件。经过长时间的搜索,我找不到一些提供这种编码(PCM到MP3)的库。我期待有一些建议或者链接到这些库。它应该在android手机中以编程方式完成,所以我不想有一些桌面解决方案。 最佳答案 有一个github项目为android提供了lame编码器https://github.com/intervigilium/liblame还有一个使用该库的示例应用程序ht
我正在使用AmrInputStream从PCM-16转换为AMR。AmrInputStream的详细信息可以在这里找到http://hi-android.info/src/android/media/AmrInputStream.java.html我对编程很陌生,虽然它谈到了使用JNI和其他东西,但我不知道JNI是什么,我认为本次讨论不需要它。上面的AmrInputStream显然也没有在SDK和NDK中找到,但我已经能够使用它。我一直在互联网上搜索如何使用流,但没有找到任何示例。最后,我进行了实验,发现它与任何InputStream都相似。这是一个代码fragmentInputStr
我有一个16位PCM格式的波形文件。我在byte[]中获得了原始数据和一种提取样本的方法,我需要它们采用浮点格式,即float[]来执行傅里叶运算转变。这是我的代码,这看起来对吗?我在Android上工作,所以javax.sound.sampled等不可用。privatestaticshortgetSample(byte[]buffer,intposition){return(short)(((buffer[position+1]&0xff) 最佳答案 我有一个类似的解决方案,但恕我直言,更简洁一些。不幸的是,据我所知,没有好的库方
我已经玩这个有一段时间了,我无法弄清楚我打算在这里做什么。我正在将PCM音频数据读入audioData数组:recorder.read(audioData,0,bufferSize);//readthePCMaudiodataintotheaudioDataarray我想使用PiotrWendykier的JTransform库对我的PCM数据执行FFT以获得频率。importedu.emory.mathcs.jtransforms.fft.DoubleFFT_1D;目前我有这个:DoubleFFT_1Dfft=newDoubleFFT_1D(1024);//1024issizeofar
我想将音频文件解码为原始PCM数据,以将其流式传输到本地网络中的播放设备。我使用新的MediaExtractor和MediaCodecAPI级别16引入的类。该设备要求PCM数据为44,100kHz,具有2个channel和16位样本大小。只要输入文件大致符合这些要求,这就可以正常工作。但是,每当我解码使用32,000kHz采样率并且可能只有一个channel的MP3文件时,我就无法从MediaCodec类获得所需的输出。看来我无法指定MediaCodec类的输出格式。所以我决定实例化另一个MediaCodec对象以将原始数据重新编码为我想要的格式。根据列表supportedmedia
我正在使用AudioRecord类来分析麦克风中的原始pcm字节。所以这很好用。现在我需要将pcm字节转换为分贝。我有一个公式可以将Pa中的声压转换为db。db=20*log10(Pa/refPa)所以问题是我从audiorecorder从缓冲区中获取的字节是什么,它是振幅帕斯卡声压还是什么。我试图将值放入公式中,但它返回的值非常高,所以我认为它不对谢谢 最佳答案 免责声明:我对Android知之甚少。您的设备可能以每秒44,100个样本(可能更少)的速度录制单声道,每个样本使用两个字节。因此,您的第一步是将原始数据中的字节对组合成
我正在尝试从解码的mp4缓冲区中获取PCM样本以进行进一步处理。我首先从使用手机的相机应用程序录制的视频文件中提取音轨,并确保在获得“audio/mp4”mime键时选择了音轨:MediaExtractorextractor=newMediaExtractor();try{extractor.setDataSource(fileUri.getPath());}catch(IOExceptione){//TODOAuto-generatedcatchblocke.printStackTrace();}intnumTracks=extractor.getTrackCount();for(i
有什么方法可以拦截或只读取android设备中的音频输出吗?我需要从myActivity中读取PCM中的整个音频输出,包括背景中的媒体播放器应用程序、通话中的语音、myACtivity中的MediaPlayer实例等,扬声器将播放的所有内容。其实,如果可以分开阅读,也很好。我试过AudioRecord,将在MediaRecorder.AudioSource中找到的每个常量作为audioSource参数运气不好,我应该尝试不同的audioSources吗?它是一个如此低级的任务,必须在native层内处理吗? 最佳答案 visuali