如何将声音保存为铃声/通知



嘿大家,所以不确定这是否可能使用as3 Android Air应用程序。我已经在它一个星期了,现在有一些进展,但不是我想要的。

到目前为止,当用户在声音上滑动时,它会弹出存储位置以在手机上保存声音。唯一的问题是它不允许我将其保存为铃声或通知。只保存在设备上;

我希望用户能够点击保存并将其保存到铃声中,以便将其设置为铃声等…

任何帮助都会很感激。以下是目前为止的内容:

我将声音保存为波形。仍然有一些问题,因为一旦文件在设备上,我试图播放它,它播放它,但然后崩溃,说无法读取文件。

var snd:Sound = new sndPanda();
        var sndBytes:ByteArray = new ByteArray();
        sndBytes.endian = Endian.LITTLE_ENDIAN;
        snd.extract( sndBytes, 44100 * 2 );
        var wav:ByteArray = encode( sndBytes );
        var f:FileReference = new FileReference(); //save file to phone
        f.save( wav, "Panda.Mp3" ); 

        function encode( data:ByteArray ):ByteArray
        {
            var channels:uint = 2;
            var bits:uint = 16;
            var rate:uint = 44100;
            var bytes: ByteArray = new ByteArray();
            bytes.endian = Endian.LITTLE_ENDIAN;
            bytes.writeUTFBytes( 'RIFF' );
            bytes.writeInt( uint( data.length + 44 ) );
            bytes.writeUTFBytes( 'WAVE' );
            bytes.writeUTFBytes( 'fmt ' );
            bytes.writeInt( uint( 16 ) );
            bytes.writeShort( uint( 1 ) );
            bytes.writeShort( channels );
            bytes.writeInt( rate );
            bytes.writeInt( uint( rate * channels * ( bits / 8 ) ) );
            bytes.writeShort( uint( channels * ( bits / 8 ) ) );
            bytes.writeShort( bits );
            bytes.writeUTFBytes( 'data' );
            bytes.writeInt( data.length );
            data.position = 0;
            var length:int = data.length - 4;
            while (data.position < length) { // could be better :-)
                bytes.writeShort(uint(data.readFloat() * 65536));
            }
            bytes.position = 0;
            return bytes;
        }

正如你所看到的,我正在使用filerreference保存到设备。但我知道肯定有办法保存为铃声。

唯一的问题是它不允许我保存为铃声或通知。保存在设备上

这就是FileReference的作用。加载到您的应用程序或保存到设备存储。
在AS3中没有内置的方法将音频设置为Android铃声/通知。你可以考虑寻找一个ANE (Android Native Extension)。

我将声音保存为wav。

为什么把MP3扩展与WAV (PCM)数据文件?参见:f.save( wav, "Panda.Mp3" );

我试着播放它,它播放它,但然后崩溃,说不能读取文件。

我不知道这是否会解决你的问题,但考虑到var snd:Sound = new sndPanda();
如果sndPanda是MP3数据,则使用:

var snd:Sound = new sndPanda();
var sndBytes:ByteArray = new ByteArray();
var totalSamples : int = int( Math.floor ( (snd.length/1000) * 44100) );
sndBytes.endian = Endian.LITTLE_ENDIAN;
snd.extract( sndBytes, totalSamples );
var wav:ByteArray = encode( sndBytes );
var f:FileReference = new FileReference(); //save file to phone
f.save( wav, "Panda.Mp3" );

相关内容

  • 没有找到相关文章

最新更新