gpt4 book ai didi

android - AudioTrack 播放静态声音

转载 作者:行者123 更新时间:2023-12-03 00:37:32 30 4
gpt4 key购买 nike

我想在 android 中使用带有 PCM 16 位 channel 的立体声播放带有 AudioTrack 类的音乐轨道。这是我的 的代码MusicListFragment.java

import android.media.AudioFormat;
import android.media.AudioManager;
import android.media.AudioTrack;
import android.media.MediaPlayer;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.ListView;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;

public class MusicListFragment extends Fragment implements AdapterView.OnItemClickListener {

private AudioTrack mAudioTrack;

public MusicListFragment() {

}


@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// Inflate the layout for this fragment
View view = inflater.inflate(R.layout.fragment_music_list, container, false);

ListView musicListView = (ListView) view.findViewById(R.id.music_list_view);
musicListView.setAdapter(new MusicListAdapter(getActivity()));

int minBufferSize = AudioTrack.getMinBufferSize(
22000,
AudioFormat.CHANNEL_OUT_STEREO, AudioFormat.ENCODING_PCM_16BIT);
mAudioTrack = new AudioTrack(AudioManager.STREAM_MUSIC, 22000
, AudioFormat.CHANNEL_OUT_STEREO, AudioFormat.ENCODING_PCM_16BIT, minBufferSize,
AudioTrack.MODE_STREAM);

musicListView.setOnItemClickListener(this);

return view;
}

@Override
public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {
Music music = (Music) adapterView.getItemAtPosition(i);
InputStream inputStream = null;
byte[] bytes = new byte[512];

mAudioTrack.play();

try {
File file = new File(music.getPath());
inputStream = new FileInputStream(file);
int k;
while ((k = inputStream.read(bytes)) != -1) {
mAudioTrack.write(bytes, 0, k);
}
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}

适配器工作正常,因为我使用 对其进行了测试。媒体播放器 类(class)。 (如果你愿意,我也可以提供我的适配器和其他类。但我怀疑它们是问题所在。)我的 ListView 显示了音乐的标题、艺术家和专辑,还存储了每个音乐的路径。
我可以用 轻松播放音乐媒体播放器 ,但我在使用 时遇到问题音轨 .该代码使设备播放静态声音,就像没有信号时的旧电视一样! :)
正如您在适配器的点击监听器中看到的那样,我是
1. 获取被选中的音乐。
2.将音乐文件读入 输入流
3. 最后将字节写入音轨实例。 (我还在try,catch语句之后加上了这条线:mAudioTrack.play(),没有运气)我在这里做错了什么?

最佳答案

将压缩音频文件的二进制内容播放到 AudioTrack,也许?除非您的音乐文件以原始、未压缩的格式存储,否则这将不起作用。音轨使用 PCM format .即使是 .wav 文件的标题听起来也像是静态的,直到您到达原始样本为止。

关于android - AudioTrack 播放静态声音,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39257108/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com