Articles of audiotrack

Android – 将多个静态波形混合到一个AudioTrack中

我正在制作一个带有一系列频率值(即440Hz,880Hz,1760Hz)的类,并播放它们如何组合成单个AudioTrack的声音。 我不是一个合理的程序员,所以我很难自己写,我相信对于经验丰富的声音程序员来说这是一个相对容易的问题。 以下是play方法中的一些代码: public void play() { // Get array of frequencies with their relative strengths double[][] soundData = getData(); // TODO // Perform a calculation to fill an array with the mixed sound – then play it in an infinite loop // Need an AudioTrack that will play calculated loop // Track sample info […]

AudioTrack发布

我想知道我是否需要在音轨上拨打电话? 例如,在我的下面的代码中,我在方法中实例化一个AudioTrack实例,并且不在其上调用release(因为它会停止播放)。 这有什么影响? public void playTone() { float[] output = createTone(); AudioTrack track = new AudioTrack(AudioManager.STREAM_RING, 44100, AudioFormat.CHANNEL_OUT_MONO, AudioFormat.ENCODING_PCM_16BIT, (output.length*4), AudioTrack.MODE_STATIC); short[] result = new short[output.length]; for(int i = 0; i < output.length; i++) result[i] = (short) ((output[i])*32768); track.write(result, 0, output.length); track.play(); }

Android AudioTrack Mixing的示例代码

我在资源文件夹中有两个PCM声音文件。 我使用inputstream并将它们转换为bytearray。 然后我通过规范化处理它们并添加music1和music2并输出到字节数组输出。 最后,输出数组并将其提供给AudioTrack。 显然,我没有听到任何声音,也没有出现问题。 private void mixSound() throws IOException { InputStream in1=getResources().openRawResource(R.raw.cheerapp2); InputStream in2=getResources().openRawResource(R.raw.buzzer2); byte[] music1 = null; music1= new byte[in1.available()]; music1=convertStreamToByteArray(in1); in1.close(); byte[] music2 = null; music2= new byte[in2.available()]; music2=convertStreamToByteArray(in2); in2.close(); byte[] output = new byte[music1.length]; audioTrack.play(); for(int i=0; i 1.0f) mixed = 1.0f; if (mixed 0) { baos.write(buff, 0, i); } return […]

通过耳机播放音乐时播放扬声器的声音

我通过耳机播放AudioTrack 。 我只需要将SoundPool发送到内置扬声器,而不会中断通过耳机播放的AudioTrack 。 任何黑客歹徒?

如何使用ffmpeg改变音频节奏和音调个性?

我已经设法在我的android项目中使用ffmpeg和AudioTrack类播放音频文件。 我可以使用AudioTrack类setRate方法更改音频的速度。 但它也改变了音频的音调,我想只改变音频的速度,但我发现网上没有解决方案。 任何人都可以帮助我,因为没有这方面的支持。

AudioTrack flush()导致静态

我正在使用AudioTrack实例播放音乐。 当用户在歌曲中改变歌曲或寻找时我想在播放新数据之前刷新缓冲区。 stop()的文档似乎指导我做类似的事情: audioTrack.pause(); audioTrack.flush(); audioTrack.play(); audioTrack.write(newData, …); 但是,这通常会产生轻微的静电。 我尝试了一些解决方法。 在我的测试设备上工作的(如摆脱静态)是flush()之后的Thread.sleep(10,0)。 但它感觉非常hackish和任意,如果它不能在其他设备上工作怎么办? 此外,我不想阻止纳米片超过必要的时间。 解决这个问题的正确方法是什么?

将AudioTrack与AudioManager setSpeakerphoneOn配合使用

我正在使用AudioTrack来播放我通过UDP套接字收到的声音。 我和声音一起发出很多噪音,所以我决定使用AudioManager。 但AudioManager会将声音路由更改为超出应用程序的范围。 以下是我正在使用的代码。 m_amAudioManager = (AudioManager)context.getSystemService(Context.AUDIO_SERVICE); m_amAudioManager.setMode(AudioManager.MODE_IN_CALL); m_amAudioManager.setSpeakerphoneOn(false); 这段代码的问题在于,当我关闭应用程序并启动音乐播放器时,声音来自前置扬声器而不是后置扬声器,我不能以某种方式改变它。 要解决此问题,我决定在关闭应用时添加以下行。 m_amAudioManager.setSpeakerphoneOn(true); 但是对于这条线,问题是当我接到一个电话(正常通话)时,默认情况下扬声器开启。 我真的需要帮助。

Android AudioTrack不播放所有样本

我正在使用AudioTrack播放一系列正弦波,但是当我在HTC M9上运行它时,它只播放部分样本,并且它将播放多长时间是随机的。 例如,我有20个音调可以播放,但它只播放2到17.5个音调。 是的,它甚至会在音调中间停止。 这是我的代码,来自另一个答案: ArrayList samples = new ArrayList(); int numSamples = 0; for (final ToneSegment seg : sequence) { int num = seg.getDuration() * sampleRate / 1000; double[] sample = new double[num]; for (int i = 0; i >> 8); } } audioTrack = new AudioTrack(AudioManager.STREAM_MUSIC, sampleRate, AudioFormat.CHANNEL_OUT_MONO, AudioFormat.ENCODING_PCM_16BIT, generatedSnd.length, AudioTrack.MODE_STATIC); audioTrack.write(generatedSnd, 0, […]

如何播放不在url或存储空间内的音频文件的InputStream?

背景 我已成功将音频文件(3gp)上传到Google-Drive。 现在我希望能够在应用程序中播放该文件。 Google Drive API仅允许获取存储在其中的文件的输入流。 问题 在我的情况下,输入的所有MediaPlayerfunction都不可用,只有InputSteam: http://developer.android.com/reference/android/media/MediaPlayer.html#setDataSource(java.io.FileDescriptor) 我知道我可以将文件从Google-Drive保存到缓存并播放,但我想避免存储处理,并动态播放文件。 我试过的 我试图搜索这个问题,并且发现可能使用AudioTrack( 这里 )。 它也可能使用新的Jelly-Beanfunction( 这里显示,从这里find),但我不确定它是否相当低级别。 可悲的是,使用AudioTrack我听到了错误的声音(噪音)。 我还注意到MediaPlayer可以选择将dataSource设置为MediaDataSource( 这里 ),但不仅我不确定如何使用它,它还需要API 23及更高版本。 当然,我尝试使用Google-Drive中提供的url,但这仅用于其他目的,并未定向到音频文件,因此无法使用MediaPlayer。 这个问题 给定一个InputStream,是否可以使用AudioTrack或其他东西来播放音频3gp文件? 可能有支持库解决方案吗?

SoundPool“AudioFlinger无法创建曲目,状态:-12”

我有一个单按钮的Android应用程序。 单击该按钮时,应用程序开始播放(循环)SoundPool加载的声音。 再次单击该按钮时,声音停止,然后再次启动。 但问题是声音只在每隔一段时间播放。 点击第1次 – >声音开始播放 单击第二次 – >声音停止但不再开始 单击第3次 – >声音开始播放 单击第4次 – >声音停止但不开始播放 等等… 当声音没有播放时,logcat中会出现此错误: E/AudioTrack: AudioFlinger could not create track, status: -12 E/SoundPool: Error creating AudioTrack 当我删除循环(将-​​1更改为0)时,一切正常! 我正在播放的声音是MP3文件,大小为71.6 KiB。 我在Sony Xperia U上测试了这个,运行Android 4.1.2(不工作)。 但在我的华为Honor 6(Android 6.0)中,一切正常,包括循环! 我究竟做错了什么? 这是我的代码: import android.media.AudioManager; import android.media.SoundPool; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.view.View; import android.widget.Button; public […]