На главную
ПРАВИЛА FAQ Помощь Участники Календарь Избранное DigiMania RSS
msm.ru
! Правила раздела "Программирование звука"
0) Данный раздел предназначен для обсуждения проблем, возникающих при программировании задач, связанных с записью, обработкой, воспроизведением звука. Перед созданием темы подумайте, не будет ли она уместнее в разделах Разработка и тестирование программ, Наши исходники, а особенно Разовые заказы и подработки
1) На Раздел распространяются все Правила форума.Огромная просьба с ними внимательно ознакомиться.
2) Запрещается давать бессмысленные ответы вроде: "Снеси Мастдай", "ХП рулит", "Поставь Линукс" и т.д.
3) Запрещается создавать темы, в которых Вы намереваетесь получить ссылку на кряки, серийники и т.п. Также запрещено любое обсуждение p2p (peer-to-peer) сетей (BitTorrent, eDonkey и т.д.).
4) Реклама всякого рода пресекается беспощадно.
5) Используйте тэг [CODE] для выделения кода программы (непременно с указанием языка программирования - выбрать из списка. В противном случае бессмысленно!). Уважайте тех, кто будет читать ваш код!
6) Если решение вашей проблемы найдено, то не забываем помечать тему специальной функцией "Вопрос решён". Вам всего лишь требуется при написании последнего ответа поставить одну единственную галочку прямо над формой ответа.
7) Если вы хотите получить совет для конкретной платформы/языка программирования, обязательно укажите их в вопросе

8) Если не прикрепляются/не скачиваются файлы, читаем Не прикрепляется / не скачивается файл. Любые обсуждения в данном разделе проблем с приложением файлов считаются оффтопиком! Со всеми вытекающими.

9) NEW! Уважаемые новички! Мы приветствуем Ваше желание научить всех посетителей раздела правильному программированию. Но огромная просьба, перед тем, как писать поучения в старых (последний ответ - "старее" месяца, а особенно, если вопрошавший не появляется на форуме уже не первый месяц, в чем можно убедиться в его профиле) темах, хорошо подумать, будет ли кому-нибудь, кроме Вас cамих, это интересно. Попытки накрутки количества тематических сообщений за счёт поднятия древних неактуальных тем ("некрофилия") будут наказываться по велению левой пятки модераторского состава (см. пп.12, 13 Правил)



Нарушение Правил может повлечь наказание со стороны модераторов.



user posted imageFAQ Раздела user posted imageПоиск в Разделе user posted imageMSDN Library Online | Ваше мнение о модераторах: user posted imageBarazuk user posted imageRikkie
Модераторы: barazuk
  
> Конвертирование WAV в MP3
    Использую JavaScript-порт кодировщика LAME для конвертирования WAV-файла в MP3.

    Есть примеры конвертирования пустого буфера

    Momo
    ExpandedWrap disabled
      channels = 1; //1 for mono or 2 for stereo
      sampleRate = 44100; //44.1khz (normal mp3 samplerate)
      kbps = 128; //encode 128kbps mp3
      mp3encoder = new lamejs.Mp3Encoder(channels, sampleRate, kbps);
      var mp3Data = [];
       
      samples = new Int16Array(44100); //one second of silence (get your data from the source you have)
      sampleBlockSize = 1152; //can be anything but make it a multiple of 576 to make encoders life easier
       
      var mp3Data = [];
      for (var i = 0; i < samples.length; i += sampleBlockSize) {
        sampleChunk = samples.subarray(i, i + sampleBlockSize);
        var mp3buf = mp3encoder.encodeBuffer(sampleChunk);
        if (mp3buf.length > 0) {
            mp3Data.push(mp3buf);
        }
      }
      var mp3buf = mp3encoder.flush();   //finish writing mp3
       
      if (mp3buf.length > 0) {
          mp3Data.push(new Int8Array(mp3buf));
      }
       
      var blob = new Blob(mp3Data, {type: 'audio/mp3'});
      var url = window.URL.createObjectURL(blob);
      console.log('MP3 URl: ', url);


    Stereo
    ExpandedWrap disabled
      mp3encoder = new lamejs.Mp3Encoder(2, 44100, 128);
      var mp3Data = [];
       
      left = new Int16Array(44100); //one second of silence (get your data from the source you have)
      right = new Int16Array(44100); //one second of silence (get your data from the source you have)
      sampleBlockSize = 1152; //can be anything but make it a multiple of 576 to make encoders life easier
       
      for (var i = 0; i < samples.length; i += sampleBlockSize) {
        leftChunk = left.subarray(i, i + sampleBlockSize);
        rightChunk = right.subarray(i, i + sampleBlockSize);
        var mp3buf = mp3encoder.encodeBuffer(leftChunk, rightChunk);
        if (mp3buf.length > 0) {
          mp3Data.push(mp3buf);
        }
      }
      var mp3buf = mp3encoder.flush();   //finish writing mp3
       
      if (mp3buf.length > 0) {
          mp3Data.push(mp3buf);
      }
       
      console.log(mp3Data);



    По аналогии конвертирую Mono-файл.
    ExpandedWrap disabled
      function convertWAVToMP3(audioData)
      {
          var wav = lamejs.WavHeader.readHeader(new DataView(audioData))
       
          var samples = new Int16Array(audioData, wav.dataOffset, wav.dataLen / 2)
          
          var buffer = []
          var mp3enc = new lamejs.Mp3Encoder(wav.channels, wav.sampleRate, 128)
          var remaining = samples.length
          var maxSamples = 1152
       
          for ( var i = 0; remaining >= maxSamples; i += maxSamples ) {
              var mono = samples.subarray(i, i + maxSamples)
              var mp3buf = mp3enc.encodeBuffer(mono)
              if ( mp3buf.length > 0 ) {
                  buffer.push(new Int8Array(mp3buf))
              }
              remaining -= maxSamples
          }
       
          var d = mp3enc.flush()
          if ( d.length > 0 ) {
              buffer.push(new Int8Array(d))
          }
          
          return buffer
      }


    В audioData находится файл, прочитанный в виде ArrayBuffer. Работает.

    А как конвертировать Stereo-файл?
    В частности непонятно как заполнять left и right массивы из примера про Stereo.
    Сообщение отредактировано: vtg -
    1 пользователей читают эту тему (1 гостей и 0 скрытых пользователей)
    0 пользователей:


    Рейтинг@Mail.ru
    [ Script Execution time: 0,0896 ]   [ 14 queries used ]   [ Generated: 18.08.17, 03:16 GMT ]