MODE_STREAM中的AudioTrack没有声音

时间:2015-07-11 06:50:30

标签: java android audio inputstream audiotrack

我已经坚持这个问题好几天了。我现在处于舞台上,我只是试图找到一个可靠的实例来构建,但我甚至无法达到这一点。

我的问题基于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_MUSICMODE_STREAM在这个例子中似乎不合适。我正在使用那些标志/模式,因为我知道我将需要在开发后使用这些模式的AudioTrack,而且我只是想让声音从设备中传出来。

有人可以建议调试步骤,或者看看播放的问题是什么?任何帮助表示赞赏。

1 个答案:

答案 0 :(得分:4)

当我第一次提出这个问题时,我已经确定了我原来的问题。希望它可以帮助其他人...

Android phone volumes

事实证明,当我调整音量时,应用程序没有播放音频,因此实际上最大的音量是系统/铃声音量,而不是'音乐,视频游戏和其他媒体的音量很低。