Запись звука с микрофона




Принцип обмена данными из 1С с сайтом (на MySQL) и выдачи (публикации) этих данных по запросу.
PHP-Скрипт автоматической загрузки данных из файла данных в формате CSV в базу данных сайта работающего на WordPress.

В продолжение моей темы: 1С:Альфа-Авто Автосалон Автосервис: обмен с сайтом.
С помощью данного скрипта можно загружать в автоматическом режиме, по расписанию, данные сервисных книжек (ремонтов авто) из 1С:Альфа-Авто Автосалон Автосервис.
Также можно загружать данные в ручном режиме: для этого делается скрытая страница, где размещается специальная кнопка.
Комментарии размещенные внутри скрипта разъяснят логику и порядок действия.
Комментарии с "/////    echo" использовались для отладки.
Дополнительно создана таблица для журналирования результатов загрузки данных.
Скрипт включает в себя защиту от SQL инъекций (думаю безопасность соблюдена в полной мере).
В кратце:
1. Пишется скрипт, который запускает этот.
2. Создается регламентное задание в WordPress, по которому запускается скрипт из п.1. 
3. Этот скрипт осуществляет проверку на существование файла обмена в папке.
4. Если данные не новые, загрузка не производится.
5. Если данные новые, очищается таблица сервисных книжек.
6. Загружаются новые данные.

Собственно сам скрипт:

<?php // Полная загрузка сервисных книжек, создан 2024-01-05 12:44:55

global $wpdb2;
global $failure;
global $file_hist;

/////  echo '<H2><b>Старт загрузки</b></H2><br>';

$failure=FALSE;
//подключаемся к базе
$wpdb2 = include_once 'connection.php'; ; // подключаемся к MySQL
// если не удалось подключиться, и нужно оборвать PHP с сообщением об этой ошибке
if (!empty($wpdb2->error))
{
/////   echo '<H2><b>Ошибка подключения к БД, завершение.</b></H2><br>';
$failure=TRUE;
wp_die( $wpdb2->error );
}

$m_size_file=0;
$m_mtime_file=0;
$m_comment='';
/////проверка существования файлов выгрузки из 1С
////файл выгрузки сервисных книжек
$file_hist = ABSPATH.'/_1c_alfa_exchange/AA_hist.csv';
if (!file_exists($file_hist))
{
/////   echo '<H2><b>Файл обмена с сервисными книжками не существует.</b></H2><br>';
$m_comment='Файл обмена с сервисными книжками не существует';
$failure=TRUE;
}

/////инициируем таблицу лога
/////если не существует файла то возврат и ничего не делаем
if ($failure){
///включает защиту от SQL инъекций и данные можно передавать как есть, например: $_GET['foo']
/////   echo '<H2><b>Попытка вставить запись в лог таблицу</b></H2><br>';
$insert_fail_zapros=$wpdb2->insert('vin_logs', array('time_stamp'=>time(),'last_mtime_upload'=>$m_mtime_file,'last_size_upload'=>$m_size_file,'comment'=>$m_comment));
wp_die();
/////    echo '<H2><b>Возврат в начало.</b></H2><br>';
return $failure;
}
/////проверка лога загрузки, что бы не загружать тоже самое
$masiv_data_file=stat($file_hist);   ////передаем в массив свойство файла
$m_size_file=$masiv_data_file[7];    ////получаем размер файла
$m_mtime_file=$masiv_data_file[9];   ////получаем дату модификации файла
////создаем запрос на получение последней удачной загрузки
////выбираем по штампу времени создания (редактирования) файла загрузки AA_hist.csv, $m_mtime_file

/////   echo '<H2><b>Размер файла: '.$m_size_file.'</b></H2><br>';
/////   echo '<H2><b>Штамп времени файла: '.$m_mtime_file.'</b></H2><br>';
/////   echo '<H2><b>Формирование запроса на выборку из лога</b></H2><br>';
////препарируем запрос
$text_zaprosa=$wpdb2->prepare("SELECT * FROM `vin_logs` WHERE `last_mtime_upload` = %s", $m_mtime_file);
$results=$wpdb2->get_results($text_zaprosa);

if ($results)
{   foreach ( $results as $r)
{
////если штамп времени и размер файла совпадают, возврат
if (($r->last_mtime_upload==$m_mtime_file) && ($r->last_size_upload==$m_size_file))
{////echo '<H2><b>Возврат в начало, т.к. найдена запись в логе.</b></H2><br>';
$insert_fail_zapros=$wpdb2->insert('vin_logs', array('time_stamp'=>time(),'last_mtime_upload'=>$m_mtime_file,'last_size_upload'=>$m_size_file,'comment'=>'Загрузка отменена, новых данных нет, т.к. найдена запись в логе.'));
wp_die();
return $failure;
}
}
}
////если данные новые, пишем в лог запись о начале загрузки
/////echo '<H2><b>Попытка вставить запись о начале загрузки в лог таблицу</b></H2><br>';
$insert_fail_zapros=$wpdb2->insert('vin_logs', array('time_stamp'=>time(),'last_mtime_upload'=>0, 'last_size_upload'=>$m_size_file, 'comment'=>'Начало загрузки'));

////очищаем таблицу
$clear_tbl_zap=$wpdb2->prepare("TRUNCATE TABLE %s", 'vin_history');
$clear_tbl_zap_repl=str_replace("'","`",$clear_tbl_zap);
$results=$wpdb2->query($clear_tbl_zap_repl);
/////   echo '<H2><b>Очистка таблицы сервисных книжек</b></H2><br>';
if (empty($results))
{
/////   echo '<H2><b>Ошибка очистки таблицы книжек, завершение.</b></H2><br>';
//// если очистка не удалась, возврат
$failure=TRUE;
wp_die();
return $failure;
}

////загружаем данные
$table='vin_history';         // Имя таблицы для импорта
//$file_hist Имя CSV файла, откуда берется информация     // (путь от корня web-сервера)
$delim=';';          // Разделитель полей в CSV файле
$enclosed='"';      // Кавычки для содержимого полей
$escaped='\

14 Comments

  1. Nurbek_EkipazhKZ

    День добрый!При воспроизведении звука, шумы, что не так делаю?

    Reply
  2. odineskin2

    (1) Nurbek_EkipazhKZ,

    Добрый день. видимо устройство у вас по другому настроено, смотрите там в коде есть строчка

    Команда = «cmd.exe /c » + linco_exe + » -B 32 -C 2 -R 44100 | » + lame_exe + » -r — » + out_mp3

    для утилиты linco.exe есть параметры командной строки:

    -B, —bits Set number of bits per sample.

    -C, —channels Set number of channels.

    -R, —rate Set number of samples per second(sample rate).

    -D, —duration Specify maximum record duration(h:m:s).

    -dev, —device Specify the sound device to be used for recording.

    -lsdev List the installed sound devices and exit.

    -ff Support «flag-files».

    вам нужно из командой строки запустить linco.exe с параметром lsdev и посмотреть какие устройства у вас в системе определены и затем в строчку в 1с добавить — dev 1(или номер устр-ва которое есть у вас).

    файлик linco.exe прикладываю

    Reply
  3. kuzyara

    А какие бывают сценарии применения звукозаписи в 1С?

    Reply
  4. odineskin2

    (3) kuzyara,

    ну например звукозаметки к справочники (контрагенту, номенклатуре).

    а также если звуковая карта поддерживает стерео микшер, то можно записывать разговоры со скайпа, ip телефонии — т.е. весь звук с компьютера и например прикладывать его к заказам, счетам и т.д.

    Reply
  5. fzt

    (4) отличная идея, при выставлении счета за телефонные консультации. Браво. Не забудьте предупредить абонента что «для повышения качества бла бла, все разговоры записываются». Осталось как-то это дело импортировать с моего сотового 😀

    Reply
  6. starik-2005

    (3) kuzyara, ну для людей с ограниченными функциями зрения очень даже может помочь. Для Linux можно реализовать через sox — там функций очень много, включая запись с того момента, как что-то сказали и до момента окончания реплики — даже кнопку «стоп» не надо.

    Reply
  7. outs1deR

    Подскажите пожалуйста, скачал эту обработку, но мне нужно записывать не только микрофон, но и наушники (стоит гарнитура). Мне нужно для целей ip телефонии. что можно сделать?Стерео микшер включал, но тогда вообще ничего не записывается (назначал микшер устройством по умолчанию). Тестировал на win7

    Reply
  8. odineskin2

    (7) outs1deR, если гарнитура юсб то не все звуковые карты будут через стеремикшер писать звук

    Reply
  9. outs1deR

    (8) спасибо большое что ответили! Но теперь проблема другая — стерео микшер настроил, все работает, но мой собеседник на другом конце провода слышит сам себя с задержкой, то есть как будто эхо. Видимо звук от него передается ко мне в наушники и потом передается обратно ему же. И похоже что это никак не поправить. Если отключить микшер, то записывается только звук с микрофона, то есть запись того, что сказал собеседник не ведется. Даже уже не знаю куда копать. В теории нужна какая то компонента, которая будет писать микрофон и линейный вход, объединять потоки и создавать итоговую запись. Где такую найти — ума не приложу, не подскажите, библиотека LAME такое умеет?а то описания ее нигде не найду

    Reply
  10. odineskin2

    (9) outs1deR, LAME пишит звук с устройства которое ему казать. как вариант попробуйте настроить звонилку, указать на выходе микрофон а не стереомикшер. как то так.

    Reply
  11. als

    Попробовал обработку. Как раз, то что искал.

    Спасибо за решение!

    Reply
  12. men260181

    Добрый день! Пробовал вашу разработку и столкнулся с интересным моментом: несколько дней назад запись шла хорошо, файл после прослушивал и все было замечательно. Хотел показать коллеге данную разработку, начал демонстрацию и получил странный результат: файлы записываются в замедленном виде, при прослушивании на разных плеерах голос очень замедлен. Не могли бы подсказать в чем может быть дело?

    Reply
  13. odineskin2

    Добрый день. Как вариант поиграться параметрами записи библиотеки. Ссылка выше была

    (12)

    Reply
  14. sabretoothed

    Добрый день.Обработка у меня работает.Но хотелось бы ещё узнать возможно ли дописывать в существующий файл?Или например ставить запись на паузу?

    Reply

Leave a Comment

Ваш адрес email не будет опубликован. Обязательные поля помечены *