#ifndef JNI_STREAM_PLAYER_H_ #define JNI_STREAM_PLAYER_H_ #include #include "audio_parameter.h" namespace base { class AudioPlayer { public: typedef void (*CompletionCallback)(AudioPlayer* player, int what, void* user_data); typedef void (*ErrorCallback)(AudioPlayer* player, int what, const std::string& str, void* user_data); public: AudioPlayer(const AudioParameter& parameter); virtual ~AudioPlayer(); int Play(); int Pause(); int Resume(); int Stop(); int PutSamples(const uint8_t* samples, int length); /** * 当前播放位置 */ double GetCurrentPositon(); /** * 总时长 */ double GetDuration(); /* * vol 0.0 ~ 1.0 * 平台无关 */ int SetVolume(float volume); /** * 平台相关 */ int SetVolume2(int volume); int SetMute(bool mute); void set_error_callback(AudioPlayer::ErrorCallback callback, void* user_data); void set_completion_callback(AudioPlayer::CompletionCallback callback, void* user_data); /** * 设置读取超时时间, 防止Play接口长时间阻塞 * 默认5000毫秒 */ void set_read_timeout(int millis); private: class Impl; Impl* impl_; }; } /* namespace fy */ extern "C" base::AudioPlayer* CreateAudioPlayer(); extern "C" void DestroyAudioPlayer(base::AudioPlayer* stream_player); /** * 当所有的StreamPlayer停止播放后,将关闭音频输出设备 * 默认延迟5000毫秒关闭 * @param millis 延迟时间 (毫秒) */ extern "C" void SetAudioPlayerDisableAudioOutputDeviceDelayed(int millis); struct StreamPlayerMuteHandler { /** * 播放器设置是否静音 * @param mute * @return */ int (*SetMute)(bool mute); /** * 是否静音,静音返回true * @return */ bool (*GetMute)(); }; extern "C" void SetAudioPlayerMuteHandler(const StreamPlayerMuteHandler& handler); #endif /* JNI_STREAM_PLAYER_H_ */