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

时间:2016-07-04 01:58:44

标签: android actionscript-3 air wav filereference

嘿大家所以不确定这是否可以使用as3 for Android Air App。我已经参加了一个星期,虽然取得了一些进展但不是我想要的。

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

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

任何帮助将不胜感激。以下是我到目前为止的情况:

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

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;
        }

正如您所见,我正在使用FileReference保存到设备。但我知道必须有一种方法可以保存为铃声。提前谢谢。

1 个答案:

答案 0 :(得分:2)

  

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

即可

这就是FileReference的作用。 加载到您的应用中或保存到设备存储。
AS3中没有内置方式将音频设置为Android铃声/通知。您可以考虑寻找ANE(Android原生扩展)。

  

我将声音保存为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" );