请参阅: 说明
程序包 | 说明 |
---|---|
com.yunos.tv.karaoke |
包含TMKaraoke的控制,AudioTrack等功能。
|
com.yunos.tv.karaoke.player |
包含SDK内提供的播放器,现在版本的播放器已经随Demo代码呈现。
|
TMKaraokeSDK 是一个为了解决在android平台上在卡拉OK的情境下一系列问题 的SDK。
此SDK的文档分为两部分:
由于主要的接口都在 Java SDK 的文档中, 所以首先阅读 Java SDK 的文档. 在通过参照文档与 demo 以后, 了解初始化的过程. Native 文档主要的功能在于得到实时得到录音数据, 可以做一些打分之类的操作.
这个 SDK 主要的目的是降低在从麦克风录音到播放之间的延时, 并且加上卡拉 OK 人声所需要的人声特效.
SDK支持两种使用模式:
普通模式
这种模式下使用了SDK的大部分的功能, 也是Demo演示的用法。 这种用使用了KaraokeController来启动reverb,然后使用AudioTrackNative来播放伴奏音乐。 具体用法请参考demo程序代码.
Native Callback 模式
这种模式下只是使用 SDK 作为 input 和 output 的功能, 其他的功能如音效, 伴奏, 等控制全部由 app 控制. 如果 app 原来有一整套架构, 只是缺少一个实时的 audio IO 系统. 可以考虑使用该模式. 其他情况下, 建议使用第一种模式.
Callback会在录好音之后调用相应的callback,并且会在需要播放的时候调用相应的callback。 其中的处理全部由Callback的实现者来控制。 但是callback还是受KaraokeController中的对于reverb的控制函数start/stop/pause/resume所控制。比如说, 只有在调用了create之后,才能注册callback, 然后在play之前通过native sdk中的TMAudioController来注册TMAudioDataCallback。 并且在pause的时候, callback不会被调用。
现在提供一个demo 的apk, 这个apk的是播放一个mp3的伴奏,并且在播放伴奏的时候控制混音的音效。 里面提供一个KPlayer的类, 该类是一个演示性的播放器, 来掩饰如果使用AudioTrackNative来播放伴奏。
关闭按键音
在魔盒中关闭按键音, 关闭方法: 系统设置->声音与图像->声音设置->关闭
准备好MP3
在播放之前,要执行
adb push example_48000.mp3 /sdcard/music_48.mp3
来把音乐文件准备好。
插入USB麦克风
然后插好一个USB麦克, 关于支持的USB麦克, 在支持设备的部分有介绍。
Demo
在Demo中点击“Start”
总体来说,SDK支持USB麦克风, 但是现有版本对于USB麦克风的比特率有一些要求。
版本 | 采样率(Sample Rate) | 声道 | 格式 |
1.1.0 | 16000-48000 | 1(48000的支持2声道) | 16bit |
版本 | 采样率(Sample Rate) | 声道 | 格式 |
1.1.0 | 48000 only | 1-2 | 16bit |
在1.1.0里面一个重要的改变就是AudioTrackNative由44.1k的输入支持变成了48k的输入支持, 因为底层的设备现在是使用48k的采样率。 AudioTrack里面不会做resample, 所以如果播放44.1的,会出现频率听起来不对的情况。 建议先在应用层做resample.
主要是要把java的sdk和对应的native库放在正确的位置
需要在应用的manifest里面申明 <uses-permission android:name="com.aliyun.permission.PCM_ACCESS"/>
和 <uses-permission android:name="android.permission.WRITE_SETTINGS"/>
.
因为功能实现的限制, 卡拉 ok 的 audio 就和系统 audio Flinger 的音频有冲突. 在开始启动 reverb,也就是卡拉 ok 的时候, 如果同时使用 audio Flinger 的 AudioTrack 播放声音, 会出现 reverb 暂时暂停, 退让让 audioFlinger 播放完成. 所以尽量在启动过程中, 避免使用 audioEffect, MediaPlayer 之类的系统自带的 audio 播放和录制.
在魔盒中, 也需要关闭按键音, 关闭方法: 系统设置->声音与图像->声音设置->关闭
AUDIO_SINK_HDMI_AV_AUTO
这个主要是为了支持新的盒子,新的盒子上HDMI和AV的输出是自动选择的,可以认为只有一个输出,不需要用户来选择。