我使用android.provider.MediaStore.Audio.Media.EXTERNAL_CONTENT_URI意图从SD卡加载音乐文件。

Intent tmpIntent1 = new Intent(Intent.ACTION_PICK, android.provider.MediaStore.Audio.Media.EXTERNAL_CONTENT_URI);
startActivityForResult(tmpIntent1, 0);

并在onActivityResult中
Uri mediaPath = Uri.parse(data.getData().toString());
MediaPlayer mp = MediaPlayer.create(this, mediaPath);
mp.start();

现在,MediaPlayer以立体声播放音频。是否可以在应用程序本身中将所选的音乐/音频文件或输出从立体声转换为单声道?

我查找了SoundPoolAudioTrack的API,但没有找到如何将mp3文件音频转换为单声道的方法。

诸如PowerAMP之类的应用程序具有那些Stereo Mono开关,当按下它们时,立即将输出音频转换为单声道信号并再次返回,它们是如何做到的?

最佳答案

您是否分别加载.wav-文件和PCM-数据?如果是这样,那么您可以轻松读取每个通道的每个样本,将它们叠加并除以通道数量即可得到单声道信号。

如果以交错的有符号短裤形式存储立体声信号,则用于计算结果单声道信号的代码可能如下所示:

    short[] stereoSamples;//get them from somewhere

    //output array, which will contain the mono signal
    short[] monoSamples= new short[stereoSamples.length/2];
    //length of the .wav-file header-> 44 bytes
    final int HEADER_LENGTH=22;

    //additional counter
    int k=0;


    for(int i=0; i< monoSamples.length;i++){
        //skip the header andsuperpose the samples of the left and right channel
        if(k>HEADER_LENGTH){
        monoSamples[i]= (short) ((stereoSamples[i*2]+ stereoSamples[(i*2)+1])/2);
        }
        k++;
    }

希望能为您提供帮助。

最好的祝福,
G_J

07-28 13:08