Articles of 音频

Android MediaPlayer流媒体在网络更改时停止

我在Android上使用MediaPlayer传输音频。 当设备从Wi-Fi移动到蜂窝网络或反之亦然时,MediaPlayer停止播放。 通常,缓冲区中有几秒钟的音频,因此播放不会立即停止。 理想情况下,我想选择不间断播放的流,但我看不出怎么做。 我正在处理服务器上托管的mp3文件和实时广播流。

重定向音频/在Android中创建备用声音路径

有没有人有经验(使用OpenSL ES,ALSA等)在Android中重定向音频或创建新的声音路径? 最终目标是创建一个虚拟麦克风来替换外部麦克风,在那里可以播放音频文件,就好像他们正在对着麦克风讲话一样。 使用AudioSource.MIC访问麦克风的应用程序应使用此备用流。 它没有必要使用语音呼叫,我相信实现这种function更难,因为它都是在无线电中完成的。 关于从哪里开始的任何想法? 我已经用OpenSL和ALSA做了一些研究,但看起来我需要打包新固件(ROM)才能定义自定义音频路径。 如果可以避免,我想创建一个应用程序级解决方案。 这些手机是“扎根”的(有su二进制文件)。 目标设备是三星Galaxy S4谷歌版(GT-i9505G)。 具体来说,我正在寻找音频驱动程序配置/源代码或i9505G的任何参考。 提前致谢! 编辑 – 我已经检查了CyanogenMod 10.2源代码树,以及jfltexx驱动程序和内核。 以下是kernel / samsung / jf / sound的内容: http : //pastebin.com/7vK8THcZ 。 这在任何地方记录?

显示音频波形

我正在android中制作一个音乐应用程序。这个音乐列表来自服务器端。 我不知道如何在android中显示音频波形? 比如在soundcloud网站上。 我在下面附上了图片。

方形波形上的android音频失真

我发现我的智能手机(android 4.2.2)无法生成方波(我需要它将音频输出用作数据传输的串行线)。 一开始我认为这是我的应用程序,但后来我做了很多重要的测试。 这些是最新的测试。 我希望你能find这种现象的解释。 我生成了一个wav文件,里面有500Hz的方波。 我在Android手机和苹果iphone上播放wav文件。 我用笔记本录制并分析了信号(连接到笔记本音频输入的音频线)。 然后我用连接在蓝牙收发器设备和笔记本音频输入之间的音频线重复测试。 智能手机通过蓝牙(一次一个)连接到蓝牙收发器设备。 注意:蓝牙收发器设备是通过蓝牙接收音频数据并使用标准音频插孔提供音频输出的设备。 这是直接连接在音频插孔上的iphone产生的信号: 这是蓝牙设备从iphone接收数据产生的信号: 这是Android设备直接与音频插孔连接产生的信号: 这是蓝牙设备从Android智能手机接收数据生成的信号: Analisys: – 蓝牙设备引入了信号带宽的削减(在我看来似乎可以接受)。 – iphone具有非常好的模拟部分(输出非常好的方波) – Android设备有非常糟糕的模拟部分(即使它非常适合音乐播放) – Android手机发送到蓝牙设备的数据不正确,实际上获取的信号与来自iphone的数据获取的信号不同。 我将智能手机恢复为出厂默认设置,但问题仍未解决。 我也尝试安装kitkat自定义ROM但问题仍然存在。 我也尝试过使用Nexus 5(android 5)和三星S4 mini(像我这样的android 4.2.2),它们就像iphone一样。 我怀疑这个问题与DTS录音室声音有关(我试图解除它并以不同的方式设置它而没有成功)。 DTS似乎是我的手机和三星s4 mini之间唯一的软件差异。 问题:我可以理解我的Android设备的模拟端不如iphone,我也可以假设我的Android设备的模拟部分坏了…但我不明白为什么我没有获得当我插入蓝牙收发器设备时,结果相同。

音频框架:流,策略,设备

我试图更好地了解Android音频框架 (特别是froyo)。 我差点把它分成流 。 AudioFlinger将每个流映射为“策略”,然后将策略路由到适当的“设备”(BT,Headset,Speaker ..) 但是我仍然很难理解:1)多个应用程序如何在同一个流上播放? 他们可以“玩”还是必须处理焦点(请求,放弃和倾听变化)? 2)当正在播放多个流时…一个流相对于另一个流的优先级是多少? 当然,通话中的流具有最高优先级,但是有任何“规则”可以理解事情的确如何运作。 如果对这个问题更有信心的人有任何研究的文件/资源​​……那就太好了。 谢谢! 马尔科

两个音频序列之间的感知相似性

我想在两段音频之间得到某种距离测量。 例如,我想比较动物的声音和模仿该动物的人的声音,然后返回声音有多相似的分数。 这似乎是一个难题。 接近它的最佳方法是什么? 我想从音频信号中提取几个特征,然后对这些特征进行欧几里德距离或余弦相似性(或类似的东西)。 什么样的function很容易提取,有助于确定声音之间的感知差异? (我看到Ahazam如何使用散列的东西,但这似乎是一个不同的问题,因为两个音频完全相同,增加了噪音。而在这种情况下,两个音频是不一样的,他们只是感觉上相似)

使用MediaMuxer无法混合音频文件和video文件?

我正在开发一个记录屏幕video和音频的Android应用程序。 我录制了这两个文件:mp3音频文件和mp4video文件(没有声音)。 现在我想混合它们并创建一个新的mp4video文件(带声音)。 从Android 4.3开始,Google建议使用MediaMuxer类来混合流音频和video。 我多次尝试都没有成功。 从Google解决我的MediaMuxer API问题的解决方案? 任何帮助将不胜感激。

Android AudioTrack缓冲问题

好的,我有一个频率发生器,它使用AudioTrack将PCM数据发送到硬件。 这是我正在使用的代码: private class playSoundTask extends AsyncTask { float frequency; float increment; float angle = 0; short samples[] = new short[1024]; @Override protected void onPreExecute() { int minSize = AudioTrack.getMinBufferSize( 44100, AudioFormat.CHANNEL_CONFIGURATION_MONO, AudioFormat.ENCODING_PCM_16BIT ); track = new AudioTrack( AudioManager.STREAM_MUSIC, 44100, AudioFormat.CHANNEL_CONFIGURATION_MONO, AudioFormat.ENCODING_PCM_16BIT, minSize, AudioTrack.MODE_STREAM); track.play(); } @Override protected Void doInBackground(Void… params) { while( Main.this.isPlaying) { […]

检查耳机是否已插入

我似乎无法find一种方法来了解Android是否插入了耳机。我发现了各种解决方案,但它们似乎总是返回假。 似乎唯一正常工作的是BroadcastReceiver ,但这不是我需要的: 我只需要这样的东西 if(headphones plugged in) { } 有这样的function吗? 它需要一些特殊权限吗?

适用于iOS和Android的音频格式

对不起,如果我问的是一般问题。 我们正在开发一个在移动设备上录制和播放音频的应用程序。 此应用程序正在为Android和iOS开发。 应用程序将使用设备麦克风录制音频并将其存储在服务器中。 用户(在Android和iOS上)可以打开应用程序并播放存储在服务器上的声音。 我们使用的声音格式是AAC。 在iOS中它的工作正常。 我们可以录制和播放AAC文件。 但在Android(三星S3和三星Galaxy Y)上,我们无法以AAC格式录制声音。 但在S3中我们可以播放AAC文件。 我的问题是,我们应该选择哪种格式用于在Android中录制和播放(应该支持从2.3到Jellybean)和iOS。 我们应该使用MP4吗? 我们的一个解决方案是,在后端,我们可以将音频文件转换为AAC,MP4或3GP,并根据版本将支持的文件提供给手机。