Как сохранить звук в качестве рингтона/уведомления?

Привет всем, так что не уверен, что это возможно с помощью приложения as3 для Android Air. Я занимаюсь этим уже неделю с некоторым прогрессом, но не таким, каким бы я хотел, чтобы он был.

До сих пор у меня это было там, где, когда пользователь прокручивает звук, он вызывает место хранения, чтобы сохранить звук на телефоне. Единственная проблема в том, что он не позволяет мне сохранить его в качестве мелодии звонка или уведомления. Просто сохраняет его на устройстве;

Я хотел бы, чтобы пользователь мог щелкнуть «Сохранить» и сохранить его в мелодии звонка, чтобы установить его в качестве мелодии звонка и т. Д.

Любая помощь будет оценена по достоинству. Вот что у меня есть до сих пор:

Я сохраняю звуки как 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 для сохранения на устройство. Но я знаю, что должен быть способ сохранить в качестве мелодии звонка. Заранее спасибо.


person Nathan    schedule 04.07.2016    source источник


Ответы (1)


Единственная проблема в том, что он не позволяет мне сохранить его в качестве мелодии звонка или уведомления. Просто сохраняет его на устройстве

Это то, что делает 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" );
person VC.One    schedule 05.07.2016
comment
Большое спасибо за всю информацию. Я некоторое время искал ANE, но никто ничего не создал из моих знаний. Надо посмотреть, как его создать. Мой единственный вариант. Еще раз спасибо за информацию и код для мп3 очень пригодился - person Nathan; 05.07.2016