Большой архив статей, книг, документации по программированию, вебдизайну, компьютерной графике, сетям, операционным системам и многому другому
 
<Добавить в Избранное>    <Сделать стартовой>    <Реклама на сайте>    <Контакты>
  Главная Документация Новости ИТ Программы Книги Games   Обои   Экспорт RSS E-Books
 
10 новых программ
CodeLobster PHP Edition 3.7.2
WinToFlash 0.7.0008
Free Video to Flash Converter 4.7.24
Total Commander v7.55
aTunes 2.0.1
Process Explorer v12.04
Backup42 v3.0
Predator 2.0.1
FastStone Image Viewer 4.1
Process Lasso 3.70.4
FastStone Image Viewer 4.0
Xion Audio Player 1.0.125
Notepad GNU v.2.2.8.7.7
K-Lite Codec Pack 5.3.0 Full
 
Наши сервисы
Рассылка новостей. Подпишитесь на рассылку сейчас и вы всегда будете в курсе последних событий в мире информационных технологий.
Новостные информеры. Поставьте наши информеры к себе и у вас на сайте появится дополнительный постоянно обновляемый раздел.
Добавление статей. Если вы являетесь автором статьи или обзора на тему ИТ присылайте материал нам, мы с удовольствием опубликуем его у себя на сайте.
 
Поиск по сайту

 
 

  Раздел: Компьютерная документация -> Интернет технологии -> PHP

 

Объединение нескольких файлов .wav с помощью PHP

В этой статье мы рассмотрим интересное применение языку программирования PHP. В данном случае мы напишем функцию, с помощью которой можно объединить несколько звуковых файлов в один.

Где это может пригодиться? Да в той же CAPTCHA, к примеру. Ведь иногда, если пользователь не может распознать символов, которые изображены на сгенерированной картинке, ему предлагают прослушать их. И в данном случае вовсе не нужно использовать специальные синтезаторы типа текст -> звук, ведь в латинице только 26 букв + 10 цифр. Но нам потребуется соединить произношение каждого символа как говорится "на лету".

Вот, собственно, и сама функция:


function joinwavs($wavs){
    $fields = join('/',array( 'H8ChunkID', 'VChunkSize', 'H8Format',
                              'H8Subchunk1ID', 'VSubchunk1Size',
                              'vAudioFormat', 'vNumChannels', 'VSampleRate',
                              'VByteRate', 'vBlockAlign', 'vBitsPerSample' ));
    $data = '';
    foreach($wavs as $wav){
        $fp     = fopen($wav,'rb');
        $header = fread($fp,36);
        $info   = unpack($fields,$header);
        // read optional extra stuff
        if($info['Subchunk1Size'] > 16){
            $header .= fread($fp,($info['Subchunk1Size']-16));
        }
        // read SubChunk2ID
        $header .= fread($fp,4);
        // read Subchunk2Size
        $size  = unpack('vsize',fread($fp, 4));
        $size  = $size['size'];
        // read data
        $data .= fread($fp,$size);
    }
    return $header.pack('V',strlen($data)).$data;
}

Думаю, разобраться вам будет с нею несложно.

Как видите, нам потребуется предварительно извлечь (заголовки) header information нашего звукового файла типа длительности duration, bit rate, audio channel и т.д.

Чтобы было понятнее, это делает функция unpack для декодирования файла:

<?php
$fp = fopen('chord.wav', 'r');
fseek($fp, 20);
$rawheader = fread($fp, 16);
$header = unpack('vtype/vchannels/Vsamplerate/Vbytespersec/valignment/vbits',
$rawheader);
print_r($header);
?>

Вот что выдаст нам это скрипт после его запуска:

Array
(
[type] => 1
[channels] => 2
[samplerate] => 22050
[bytespersec] => 88200
[alignment] => 4
[bits] => 16
)

Вот полный листинг кода с комментариями:


<?php
/* При использовании этого скрипта подразумевается, что наши звуковые 
файлы .wav имеют имена от a to z and 1 to 10 и находятся в папке 
captcha_wav в той же директории, где и этот php-файл. Переменная с 
кодом безопасности будет генерироваться для каждой сессии и содержать 
некую строку, которая и будет сверяться с данным, которые ввел пользователь */



$SecurityCode = "beb9";
$localCode = str_split(strtolower($SecurityCode)); // занесем нашу строку captcha 
в локальный массив и переведем в нижний регистр
$wav_array = array(); // этот массив нам пригодится для хранения имен звуковых файлов

foreach($localCode as $character){ // для каждого символа в строке капчи мы 
подберем соответствующий ему звуковой файл - типа 1.wav или c.wav
array_push($wav_array, $character.".wav");
}


header('Content-Type: audio/x-wav'); // заголовок для указания типа файла (аудио)
$content = joinwavs($wav_array); //  вызов функции joinwavs для соединения файлов
echo $content; // вывод бинарного содержимого нового файла


function joinwavs($wavs){
   $data = ''; // бинарный блок аудио-данных
   $tsize = 0; // начальный размер файла

   foreach($wavs as $wav){

       $fp     = fopen("captcha_wav/".$wav,'rb'); // открываем wave-файл

       $header = fread($fp,50); 
/* !!!!!!!!!! ВАЖНО !!!!!!!! Online документация говорит о том,
что заголовочная информация должна быть длиной 40 бит
до непосредственного данных файла. Но на практике оказалось
лучше использвать 50, так что поиграйтесь с этим параметром.
*/

       // чтение SubChunk2ID
       $wordata = fread($fp,4); // для проверки корректности чтения заголовка можно вывести 
	                            //на echo эту переменную. В случае получения слова "data" все идет ок.

   $header .= $wordata; // добавим слово "data" в заголовок
       
       // чтение Subchunk2Size
       $originalBytes=fread($fp, 4);  // 4 битовое поле, которое идет далее      
    
       $size  = unpack('Vsize',$originalBytes);  // числовое значение размера данных

   $tsize  += $size['size']; // суммируем размер
       
   
       // считываем данные, которые остались в файле
       $data .= fread($fp,100000);

   // закрываем data input stream
   fclose($fp);
   }
   
   return $header.pack('V',$tsize).$data;

}

?>

От вас потребуется отправить объединенный файл пользователю с заголовком audio/x-wav, чтобы браузер знал, что это звуковой файл.

Также нужны будут сами аудио-файлы для каждого символа. Думаю, их в инете масса и найти их не составит большого труда. Да и можете сами записать.

Автор: Николай Рудченко
Источник: codeguru.com.ua

Ссылки по теме
Внутренние функции
Обработка строк в РНР
PHP и всё такое...
Пишем PHP код, устойчивый к ошибкам
Полезные скрипты на PHP
Почтовые функции в РНР
Полезные функции для работы с файловой системой

Вся документация PHP

 

Компьютерная документация от А до Я - Главная

 
 


 

загрузка...

Новости ИТ
17.05.2012  Zalman планирует представить на Computex пять процессорных кулеров серии CNPS
17.05.2012  Virgin Mobile USA начала продажи смартфона LG Optimus Elite
17.05.2012  ROCCAT начала продажи бюджетной игровой мышки Savu
17.05.2012  Securify анонсировала выпуск в США Wi-Fi маршрутизатора Almond с цветным тачскрином
17.05.2012  Названа цена смартфона LG Optimus LTE II с 2 ГБ оперативной памяти
17.05.2012  Sony анонсировала поставки камеры SLT-A37 и объектива SAL18135
17.05.2012  Стали известны спецификации и цена процессора Intel Core i5-3210M
17.05.2012  В Сети появились концептуальные изображения Apple iPhone 5
17.05.2012  Мышь Razer Ouroboros «засветилась» на сайте FCC
17.05.2012  Sony анонсировала выпуск объектива SEL18200LE E18-200mm F3.5-6.3 OSS LE
17.05.2012  Беспроводной маршрутизатор PROLiNK WNR1012 может играть роль мобильной точки доступа
17.05.2012  Внешний оптический привод Buffalo BRXL-PC6VU2 поддерживает чтение и запись дисков BDXL
17.05.2012  Представлена беззеркальная камера начального уровня Sony NEX-F3
17.05.2012  Galaxy выпускает видеокарты серии GeForce GT 600, включая модель GeForce GT 610 с пассивным охлаждением
17.05.2012  QNAP представляет свои первые шестнадцатидисковые сетевые хранилища
17.05.2012  NVIDIA представила первый в мире виртуализированный GPU для ускорения облачной графики
17.05.2012  Для снижения цены кулера Alpenfцhn Matterhorn Pure Edition производитель отказался от никелирования
17.05.2012  По подсчетам Gartner, продажи сотовых телефонов уменьшились на 2%, лидером рынка является Samsung
17.05.2012  ADATA начинает продажи двухканальных наборов модулей памяти XPG Xtreme DDR3-2133X
17.05.2012  Портативный монитор PROLiNK PRO1301WE питается от порта USB
17.05.2012  Razer планирует в ближайшее время выпустить универсальную геймерскую мышку Ouroboros
17.05.2012  Sapphire начала продажи производительной версии видеокарты Radeon HD 7770 - Vapor-X HD 7770 OC
17.05.2012  Corsair выпустила обновленные модели блоков питания GS Series – GS800, GS700 и GS600
17.05.2012  На 22 мая анонсирован выпуск “облегченного” кулера Alpenfoehn Matterhorn Pure Edition
17.05.2012  ASRock анонсировала выпуск системной платы Z77 Extreme9 на базе Intel Z77
17.05.2012  Особенности локализации: японская версия Samsung Galaxy S III получила двухъядерный CPU и 2 ГБ ОЗУ
17.05.2012  Видеокарта Sapphire HD 7770 Vapor-X OC Edition: заводской разгон и эффективное охлаждение
17.05.2012  USPS вводит запрет на пересылку электронных устройств с литиевыми батареями
16.05.2012  AOC начала продажи 22-дюймового LED-монитора e2219P2
16.05.2012  Palit представила три видеокарты моделей GeForce GT 630, GeForce GT 620 и GeForce GT 610

 
Advertisment



 
Интересное в сети

Copyright © CompDoc.Ru
При цитировании и перепечатке ссылка на www.compdoc.ru обязательна. Карта сайта.
 
Rambler's Top100