2016-07-04 7 views
2

Эй, все так Не уверен, что это возможно, используя as3 для 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

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

Это то, что 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"); 
+0

Большое спасибо за всю информацию. Сейчас я искал ANE, но никто не создал ничего из моих знаний. Я должен видеть, как его создать. Мой единственный вариант. Еще раз спасибо за информацию и код для mp3, это было очень полезно – Nathan