我已经坚持这个问题好几天了。我现在处于舞台上,我只是试图找到一个可靠的实例来构建,但我甚至无法达到这一点。
我的问题基于this example。我已将源(和解决方案)包含在我自己的代码中,并且可以看到正在写入缓冲区,但设备没有声音。我正在努力确定如何进一步调试。
package com.example.audio;
import com.example.R;
import java.io.IOException;
import java.io.InputStream;
import android.content.Context;
import android.media.AudioFormat;
import android.media.AudioManager;
import android.media.AudioTrack;
import android.util.Log;
public class Synth {
private static final String TAG = Synth.class.getSimpleName();
private AudioTrack audioTrack;
private Context context;
public Synth(Context context) {
this.context = context;
int minBufferSize = AudioTrack.getMinBufferSize(22050, AudioFormat.CHANNEL_OUT_MONO, AudioFormat.ENCODING_PCM_16BIT);
audioTrack = new AudioTrack(AudioManager.STREAM_MUSIC, 22050, AudioFormat.CHANNEL_OUT_MONO, AudioFormat.ENCODING_PCM_16BIT, minBufferSize, AudioTrack.MODE_STREAM);
}
public void playSound() {
audioTrack.play();
int i = 0;
int bufferSize = 512;
byte [] buffer = new byte[bufferSize];
InputStream inputStream = context.getResources().openRawResource(R.raw.mysample);
try {
int writes = 0;
while((i = inputStream.read(buffer)) != -1) {
writes++; audioTrack.write(buffer, 0, i);
}
Log.d(TAG, "Wrote " + writes + " times." );
} catch (IOException e) {e.printStackTrace();}
try {inputStream.close();} catch (IOException e) {e.printStackTrace();}
}
}
(要复制项目:制作新项目,包含此类,添加下面提到的音频,创建Synth
的实例,然后触发playSound
公共函数)
显然我无法上传音频,或保证它在网络文件夹中的持久性,但是this tool will generate a WAV file exactly like I am using(将采样率更改为22.05kHz,然后按'下载.wav文件')
我意识到STREAM_MUSIC
和MODE_STREAM
在这个例子中似乎不合适。我正在使用那些标志/模式,因为我知道我将需要在开发后使用这些模式的AudioTrack,而且我只是想让声音从设备中传出来。
有人可以建议调试步骤,或者看看播放的问题是什么?任何帮助表示赞赏。