【问题标题】:AudioTrack in MODE_STREAM has no soundMODE_STREAM 中的 AudioTrack 没有声音
【发布时间】:2015-07-11 06:50:29
【问题描述】:

我已经被这个问题困扰了好几天了。我现在正处于一个阶段,我只是想从一个可行的例子中构建,但我什至无法达到这一点。

我的问题基于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 与这些模式一起使用,并且实际上只是暂时尝试从设备中发出声音。

谁能建议调试步骤,或者看看播放有什么问题?任何帮助表示赞赏。

【问题讨论】:

  • 它对我有用。声音是分段的(当我在VLC 中打开wav 文件时,它很流畅),但它播放something。我还必须删除import com.example.R,但除此之外,我还复制粘贴了您的执行代码。您确定可以在VLCMedia Player 中播放该文件吗?您是否在设备/计算机中检查了您的audio settings(我使用了模拟器)?
  • 哇,这很尴尬。我尝试了我在帖子中建议的示例并且它有效,然后我尝试了我的原始示例并且它有效。我不知道发生了什么。这太令人沮丧了!有什么想法会发生什么吗?我的代码示例完全未经编辑,因为我被卡住了!实际上我正在使用一个设备。嗯。我不确定在这种情况下该怎么做,因为这个问题并不是真正的问题..
  • 我不知道。有时它是纯粹的巫术......
  • 感谢您的帮助!我会给你“正确答案”,但我担心版主会认为这只是点耕作之类的。我最好自我回答,代码按写的那样工作。
  • PS - 我现在在“真实”设备上进行了测试,与模拟器不同,音频很流畅。

标签: java android audio inputstream audiotrack


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-01-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-02-21
    • 1970-01-01
    相关资源
    最近更新 更多