Пишу приложение для iPad и Adroid планшетов, которое записывает звук с микрофона, а потом проигрывает его.
То, что замечательно работает на моем комьютере, ни в какую не согласно работать на планшетах.
Подробности:
Вот код, который начинает запись и ведет ее:

Код AS3:
public function startRecording():void {
if (Microphone.isSupported) {
_isRecording = true;
_microphone = Microphone.getMicrophone(Microphone.names[0]);
_microphone.rate = 22;
_microphone.gain = 100;
_microphone.setSilenceLevel(0, 4000);
_soundData = new ByteArray();
_microphone.addEventListener(SampleDataEvent.SAMPLE_DATA, onSampleDataReceived);
} else {
trace("No microphone support!");
}
}
protected function onSampleDataReceived(event:SampleDataEvent):void
{
while(event.data.bytesAvailable)
{
var sample:Number = event.data.readFloat();
_soundData.writeFloat(sample);
}
}
На Android-e функция onSampleDataReceived не вызывается, видимо, event не приходит.
На iPad-е я нахожусь на более продвинутом этапе. SampleDataEvent приходит, _soundData явно содержит информацию (причем достаточно адекватную, чтобы нарисовать диаграмму звука), но проигрывать этот звук iPad отказывается. Максимум, что я могу услышать - несколько миллисекунд шума под конец.
Проигрываю звук я так:

Код AS3:
public function playRecording():void {
if (_soundData != null) {
_soundData.position = 0;
var sound:Sound= new Sound();
sound.addEventListener(SampleDataEvent.SAMPLE_DATA, sound_sampleDataHandler);
var channel:SoundChannel = sound.play();
channel.addEventListener(Event.SOUND_COMPLETE, soundCompleteHandler);
}
}
protected function sound_sampleDataHandler(event:SampleDataEvent):void
{
if (!_soundData.bytesAvailable > 0)
{
return;
}
for (var i:int = 0; i < 8192; i++)
{
var sample:Number = 0;
if (_soundData.bytesAvailable > 0)
{
sample = _soundData.readFloat();
}
event.data.writeFloat(sample);
event.data.writeFloat(sample);
}
}
protected function soundCompleteHandler(event:Event):void
{
//some code
}
Внимание, вопрос: кто-нибудь писал приложение, которое бы нормально работало с микрофоном на планшетах?
Upd: В app.xml доступ к миктофону, вроде, разрешен

Код:
<android>
<manifestAdditions><![CDATA[
<manifest android:installLocation="auto">
<!--See the Adobe AIR documentation for more information about setting Google Android permissions-->
<!--Removing the permission android.permission.INTERNET will have the side effect
of preventing you from debugging your application on your device-->
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<!--<uses-permission android:name="android.permission.READ_PHONE_STATE"/>-->
<!--<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>-->
<!--The DISABLE_KEYGUARD and WAKE_LOCK permissions should be toggled together
in order to access AIR's SystemIdleMode APIs-->
<!--<uses-permission android:name="android.permission.DISABLE_KEYGUARD"/>-->
<!--<uses-permission android:name="android.permission.WAKE_LOCK"/>-->
<!--<uses-permission android:name="android.permission.CAMERA"/>-->
<uses-permission android:name="android.permission.RECORD_AUDIO"/>
<!--The ACCESS_NETWORK_STATE and ACCESS_WIFI_STATE permissions should be toggled
together in order to use AIR's NetworkInfo APIs-->
<!--<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>-->
<!--<uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>-->
</manifest>
]]></manifestAdditions>
</android>