将音频文件流式传输到 soundpool load() Android

Posted

技术标签:

【中文标题】将音频文件流式传输到 soundpool load() Android【英文标题】:Streaming audio file to soundpool load() Android 【发布时间】:2012-12-29 05:56:53 【问题描述】:

我想使用 SoundPool 类来创建播放速度效果。快速或慢速播放声音(1x、0.5x、2x 等)。 但问题是 soundpool 只处理小文件。当我给一个大文件时。它什么都不播放。 我想知道是否可以加载音乐流(我的大音频文件的一些字节)并通过 soundpool 播放。有什么想法吗??

这是 soundPool 播放歌曲的代码

AudioManager mgr = (AudioManager)getSystemService(Context.AUDIO_SERVICE);
float streamVolumeCurrent = mgr.getStreamVolume(AudioManager.STREAM_MUSIC);
float streamVolumeMax = mgr.getStreamMaxVolume(AudioManager.STREAM_MUSIC);
float volume = streamVolumeCurrent / streamVolumeMax;  
soundID = soundPool.load(Environment.getExternalStorageDirectory()+"/cm.mp3", 1);
soundPool.play(soundID, volume, volume, 1, 0, 1.0f);

我找到了 JetPlayer 和 AudioTrack 类,但我没有找到任何好的教程来处理这个问题。

【问题讨论】:

【参考方案1】:

在使用SoundPool.setOnLoadCompleteListener播放之前,您需要检查文件是否加载成功

public void loadSound (String strSound, int stream) 
     boolean loaded = false;
     mSoundPool.setOnLoadCompleteListener(new OnLoadCompleteListener() 
            @Override
            public void onLoadComplete(SoundPool soundPool, int sampleId,
                    int status) 
                loaded = true;
            
        );
    try 
          stream= mSoundPool.load(aMan.openFd(strSound), 1);
         catch (IOException e) 
        // TODO Auto-generated catch block
        e.printStackTrace();
    
   // Is the sound loaded already?
   if (loaded) 
     mSoundPool.play(stream, streamVolume, streamVolume, 1, LOOP_1_TIME, 1f);
    

一个人在哪里

AssetFileDescriptor aMan =  getAssets();

【讨论】:

您确定它可以播放大型声音文件吗?什么是男人? @Bhupinder 不,它不会播放大文件,因为 SoundPool 基本上是用来播放点击声音或一些小声音。但它仍然会加载那个大文件并播放该文件的一些起始位。对于“aMan”,我更新了我的答案。希望对你有帮助

以上是关于将音频文件流式传输到 soundpool load() Android的主要内容,如果未能解决你的问题,请参考以下文章

通过 Yeti lame 包装器将音频流式传输到 mp3 文件

将音频文件从DropBox流式传输到网站上

如何实时流式传输音频文件

soundPool.load 上下文问题

iPhone SDK:将流式音频文件保存到 Documents 文件夹

IOS - 流式传输和下载音频文件