草庐IT

AudioTrack

全部标签

java - 来自 AudioTrack 流的通知消息

我已经实现了一个写入AudioTrack对象的PCM解码器。一切似乎都很好,但是,当最后写入的block停止播放时,我需要从AudioTrack对象获得某种通知。我注意到有回调方法,例如setNotificationMarkerPosition,但是,我找不到任何关于如何使用它们的详尽文档。提前致谢! 最佳答案 要获得AudioTrack回调,您可以设置标记回调或使用定期回调。我已经看到有关标记问题的报告,因此您可能想同时尝试这两种方法。对于标记回调,首先调用setNotificationMarkerPosition并使用您想要调用

android - 在 Eclipse 上通过缓冲区使用 AudioTrack 缓冲区播放音乐 - 没有声音

我正在为Android2.1编程。你能帮我解决以下问题吗?我有三个文件,一般目的是通过buffer.buffer来播放带有audiotrack的声音。我在这里变得非常绝望,因为我尝试了所有方法,但我的扬声器仍然没有声音(而android的集成媒体播放器通过模拟器播放声音没有问题)。源代码:音频播放器类,实现音轨。它将接收一个缓冲区,其中包含声音。publicAudioPlayer(intsampleRate,intchannelConfiguration,intaudioFormat)throwsProjectException{minBufferSize=AudioTrack.get

Android:多次播放 AudioTrack 产生崩溃

我正在尝试使用AudioTrack播放音频缓冲声音(.wav)。请看下面的代码。我需要在一个线程下调用这个函数来支持同时播放。在线程下很好。正常播放声音效果很好。但是,如果我连续一个接一个地使用AudioTrack执行播放声音(即在完成第一次播放声音之前执行第二次播放),则会导致设备崩溃(强制关闭意外错误)。有没有人遇到过这样的问题并以某种方式解决它?privatevoidPlayAudioTrack(StringfilePath)throwsIOException{if(filePath==null)return;byte[]byteData=null;Filefile=null;f

java - 如何在不崩溃的情况下处理从 jni 对 AudioTrack 的调用?

我试图从jni回调写入AudioTrack,我收到信号7(SIGBUS),故障地址00000000。我查看了odroid的Wolf3D示例他们似乎使用android.os.Handler来发布一个Runnable,它将在正确的线程上下文中进行更新。我也尝试过AttachCurrentThread,但在这种情况下我也失败了。它可以在从构造函数运行时播放声音,即使我将它包装在一个线程中,然后将它发布到处理程序。当我通过jni的回调执行“相同”操作时,它失败了。我假设我正在违反一些规则,但我一直无法弄清楚它们是什么。到目前为止,我还没有在SO上找到答案。所以我想知道是否有人知道应该怎么做。编

android - 使用 Android 的 AudioTrack 组合声音样本的字节会产生噪音

我正在构建一个相当简单的Android应用程序(sdk修订版14:ICS),它允许用户一次选择两个音频剪辑(都是RIFF/WAV格式,little-endian,签名的PCM-16位编码)和以各种方式组合它们以创造新的声音。我用于此组合的最基本方法如下://...soundsamplesarereadintomemoryasrawbytearrayselsewhere//...offsetiscurrentlysetto45soastoskipthe44byteheaderofbasic//RIFF/WAVfiles...//Actualcombinationmethodpublicb

android - AudioTrack如何实现左右声道分开播放?

首先,我需要动态生成2个频率相同但相位相反的正弦波音调,然后在Android上以立体声模式将它们分别播放到左右声道。播放需要完全同步,这样左右声道的正弦波就会“镜像”(当左声道的样本值为120时,右声道的样本值应该为-120)。问题是我还没有找到任何证据证明这种设置是如何工作的。是否有可能将2个单独的音调/样本缓冲区馈送到AudioTrack以分别在左右声道中同时播放?如果没有,非常感谢任何其他实现最终结果的解决方案。我想一个选择是使用预先生成的立体声波文件并使用AudioTrack流式传输这些文件,但这对于工作中的解决方案来说似乎太不灵活了。同时,如果AudioTrack能够以“真实

android - AudioRecord 和 AudioTrack 延迟

我正在尝试为android开发类似iRig的应用程序,因此第一步是捕获麦克风输入并同时播放。我有,但问题是我有一些延迟导致它无法使用,如果我开始处理缓冲区,我担心它会变得完全无法使用。我像这样使用audiorecord和audiotrack:newThread(newRunnable(){publicvoidrun(){while(mRunning){mRecorder.read(mBuffer,0,mBufferSize);//Todo:ApplyfiltershereintothebufferandthenplayitmodifiedmPlayer.write(mBuffer,0,

android - 如何从 Android 的 AudioTrack 类获取延迟信息?

我注意到AudioTrack下的C++类和AudioRecordAndroid中的API都有一个latency()未通过JNI公开的方法。据我所知,latency()AudioRecord中的方法仍然没有考虑硬件延迟(他们对此有一个TODO评论),但是latency()AudioTrack中的方法确实增加了硬件延迟。我绝对需要从AudioTrack中获取这个延迟值.有什么办法可以做到这一点?我不在乎需要什么样的疯狂hack,只要它不需要root手机(生成的代码仍然必须打包为市场上的应用程序)。 最佳答案 AudioTrack上有一个

android - AudioTrack: play() 在未初始化的 AudioTrack 上调用

我正在试验AudioTrack类。基本上,当用户触摸屏幕上的特定对象时,我的应用程序必须发出声音。我用过thisexample作为指南。我的应用程序似乎可以正常运行,但通常在触摸屏幕大约一分钟后就会崩溃:07-0220:40:53.459:E/AndroidRuntime(11973):FATALEXCEPTION:Thread-1007-0220:40:53.459:E/AndroidRuntime(11973):java.lang.IllegalStateException:play()calledonuninitializedAudioTrack.07-0220:40:53.45

java - AudioTrack - 使用 jlayer(java mp3 解码器)的短数组到字节数组失真

我正在使用jLayer解码MP3数据,调用如下:SampleBufferoutput=(SampleBuffer)decoder.decodeFrame(frameHeader,bitstream);这个返回解码数据的调用,返回一个short[]数组。output.getBuffer();当我使用该方法调用AudioTrackwrite()时,它在我循环遍历文件时播放良好:at.write(output.getBuffer(),0,output.getBuffer().length);但是,当我使用此答案中的任何方法将short[]数组转换为byte[]数组时:https://stac