Тема: Разработка модуля говарилки! (Общение/Свободное общение) -MiSHuTkA- (8 Jun 2021 в 17:28) Это я модуль поставил там для теста и примера -вывод голосовых сообщений сам сделал -позже дату и время сделаю но нада базу данных придумать тогда! -MiSHuTkA- (9 Jun 2021 в 04:21) Скрин DoR (9 Jun 2021 в 14:42) -MiSHuTkA-, Мы можем посоветовать исходя из вашего желания. --- Что бы я посоветовал? --- Использовать принцип бритвы Оккама. То есть, отсечь всё лишнее оставив суть. В вашем случае упростить/урезать код. *Начинать необходимо с простого: navigator.mediaDevices.getUserMedia ( { audio: true } ) .then ( stream => { recorder = RecordRTC ( stream, { type: \'audio\' } ); recorder.startRecording ( ); recorder.stopRecording ( ( ) => { let blob = recorder.getBlob ( ); }); }); --- Вот собственно и всё, на переменной blob весит результат. ( в архиве всё прокомментировано простым языком ) Смотрите насколько код меньше вашего, но имеет почти такой же функционал. --- При нажатии на кнопку Старт, начинает записывать голос. Кнопка Стоп, отдаёт запись браузеру....)) P.S Советую тестить с ПК и заглянуть в консоль ( в архиве код прокоман простым языком ) Качаем... -MiSHuTkA- (11 Jun 2021 в 04:24) DoR, Здарова! Спасибо тебе что сотрудничаеш я занимаюсь этим есть время седня свободное потрачу целый день буду пробывать! И еще достал разное интересное -поделюсь попробую и поставлю скоро open_server_ то у меня Denwer он не все может то что хочется -кстати сайт для теста сделал на Миханзе движке стареньком https://coral-paradise.online там буду опыты проводить ну и DCMS поставлю позже хочу DCMS улучшать да и не собираюсь барыжить скриптами както ненуждаюсь в деньгах мне просто интересно само програмирование Тут еще немогу найти переменную чтоб ссылку получить на адрес в BB код ищу ее и сделать чтоб она автоматом в окно копировалась после нажатия на кнопку сохранить типа -MiSHuTkA- (16 Jun 2021 в 16:49) DoR, Здарова! Не подскажиш как вывести сортировку файлов по времени с папки чтоб ссыль потом копировать -да автоматом и можно чтоб наговарил и она попала в список последних - примерно так <?php $dir = \"uploads\"; // Директория с mp3-файлами $files = glob(\"$dir/*.ogg*\"); // Получаем список mp3-файлов for ($i = 0; $i < count($files); $i++) { echo \"<p><input name=\'\' value=\'[mp3]uploads/\".basename($files[$i]).\"[/mp3]\' size=\'43\'></p>\"; // Выводим название файла echo \"<audio controls=\'controls\'>\"; // Выводим тег аудио с панелью управления echo \"<source type=\'audio/mpeg\' src=\'\".$files[$i].\"\' />\"; // Подключаем путь к аудио-файлу echo \"</audio>\"; // Закрываем тег echo \"<hr><br>\"; // Переходим на 2 перехода на новую строку } $files = glob(\"$dir/*.wav*\"); // Получаем список mp3-файлов for ($i = 0; $i < count($files); $i++) { echo \"<p><input name=\'\' value=\'[mp3]uploads/\".basename($files[$i]).\"[/mp3]\' size=\'43\'></p>\"; // Выводим название файла echo \"<audio controls=\'controls\'>\"; // Выводим тег аудио с панелью управления echo \"<source type=\'audio/mpeg\' src=\'\".$files[$i].\"\' />\"; // Подключаем путь к аудио-файлу echo \"</audio>\"; // Закрываем тег echo \"<hr><br>\"; // Переходим на 2 перехода на новую строку } echo \"</div>n\"; ?> Наверное база нужна!! DoR (19 Jun 2021 в 19:22) -MiSHuTkA-, Здравствуйте! Нижайшие за долгий ответ... --- Времени нет, и пока не предвидится. Приблизительно понял вашу идею. Решений на пиачпи море. --- Юзаем родительский класс php: foreach (new RecursiveIteratorIterator( new RecursiveDirectoryIterator(\'audio/\', FilesystemIterator::SKIP_DOTS | FilesystemIterator::KEY_AS_FILENAME) ) as $value): if ($value->isFile() AND in_array($value->getExtension(), [\'mp3\', \'ogg\'])): $output[] = [ \"time\" => date(\"Y-m-d\" . \" \" . \"g:i:s\", $value->getMTime()), \"files\" => $value->getFileName(), \"ras\" => $value->getExtension() ]; endif; endforeach; usort( // --- Сортировка тут $output, function ($a, $b) { return $a[\'time\'] < $b[\'time\']; } ); for ($i = 0; $i < count($output); $i++): print $output[$i][\'files\'] . \' ( \' . $output[$i][\'time\'] . \' )\'; endfor; --- Сортировка файлов по дате и выборка с нужным расширением. Добавить: пагинацию/админку/оформление/ и \"что-то\" получиться. Сортировка в usort...)) P.S Возможно защита порежет код, написал пример - распаковываем в корень. *Пример много весит потому что в нём два аудио файла. DoR (19 Jun 2021 в 20:59) -MiSHuTkA-, А вот вообще простое решение. --- Но самое простое не значит самое лучшее: $dir = \'audio/\'; $ras = \"*.ogg\"; foreach ( glob ( $dir.($ras) ) as $pi ) : $_file[ filemtime ( $pi ) ] = $pi; endforeach; krsort ( $_file, SORT_NUMERIC ) .reset ( $_file ); foreach ( $_file as $key => $value ) : print $value; endforeach; --- Я бы предпочёл вариант ниже. Почему? Аналогия. Где выгодней товар брать: у поставщика или производителя? Родительский класс php, это производитель...)) -MiSHuTkA- (23 Jun 2021 в 09:05) DoR, Здарова! Есть идея ! Сделать голосовые сообщения с базой чтоб у каждого были типа сваи записи и в папке собирались в анкете которые видет только хозяин анкеты а потом автоматом выводить куда угодно там где будут например даже в коментах голосовые сообщения а их можно сделать где угодно ! Типа так ! Думал базу сделать типа чтоб записи шли на каждого юзера типа в .dat файл а может и грузануть базу форматом Base64 еще типа <audio controls src=\"data:audio/wav;base64,UklGRmouA и тд щас время есть займусь то тут у нас затоп был дожди огороды топило! DoR (24 Jun 2021 в 10:22) -MiSHuTkA-, Привет ещё раз. --- А не переживаешь что база разрастётся? Потеря производительности и т.д... Я же ранее об этом писал...)) P.S можешь почитать что думают люди ( комы ) https://habr.com/ru/post/81862/ -MiSHuTkA- (24 Jun 2021 в 20:11) DoR, Добрый вечер! да согласен -не дело! Не подскажеш тут ошибка гдето тут нашел https://www.cyberforum.ru/php-beginners/thread329841.html -рабочая штука самая но с ошибочкой ищу ее Реально ненашел как вывести последний файл с папки по дате-времени вот только этот пример годный <?php $nf = \'20\'; // количество файлов $sort = \'down\'; // способ сортировки: up - по возрастанию, down - по убыванию $dir = \'папка с .html\'; //if(!preg_match(\"#(?:|||\\|/|//|///|////)$#isU\", $dir)) $dir .= \'\'; $scandir = scandir($dir); foreach($scandir as $v) if(preg_match(\"#.html$#isU\",$v)) { $a[] = $dir.$v; $aname[] = $v; } for($i=0;$i<count($a);$i++){ $b[filemtime($a[$i])] = $a[$i]; $bname[filemtime($a[$i])] = $aname[$i]; } if($sort == \'up\') { ksort($b); ksort($bname); } if($sort == \'down\') { krsort($b); krsort($bname); } foreach($b as $k=>$v) { $names[] = $v; $filemtime[] = date(\'d:m:Y H:i:s\', $k); } foreach($bname as $v) { $bnames[] = $v; } if($nf > count($b)) $number = count($b); else $number = $nf; for($i=0;$i<$number;$i++){ echo \'<span style=\"font-size:1.5em;\">\'.$bnames[$i].\'</span> \'.$filemtime[$i]; $content = file_get_contents($names[$i]); echo \'<br />\'.$content.\'<br /><br /><br />\'; } ?> Там почитай они делали и недоделали походу но работает выводил файл новый потом чето заедает ! :) -MiSHuTkA- (25 Jun 2021 в 07:00) DoR, Здарова! Забыл написать Тот вариант где родительский класс php: foreach (new RecursiveIteratorIterator чето непошел -незнаю может то что у меня денвер в компе PHP Version 5.3.13 Опен сервер еще не поставлю все вот как переделал тот вариант -кстати время даже в денвере показует правильно то был 1970г $dir = \'uploads/\'; $ras = \"*.ogg\"; foreach ( glob ( $dir.($ras) ) as $pi ) : $_file[ filemtime ( $pi ) ] = $pi; endforeach; krsort ( $_file, SORT_NUMERIC ) .reset ( $_file ); foreach ( $_file as $key => $value ) : $unix_time = filemtime(\"\".$value.\"\"); echo \"<input name=\'\' value=\'[mp3]uploads/\".$value.\"[/mp3]\' size=\'50\'><br>\"; // Выводим название файла echo\"\".date(\'H:i:s - d.m.Y \', $unix_time).\"<br>\"; ///Время создания echo \"<audio controls=\'controls\'>\"; // Выводим тег аудио с панелью управления echo \"<source type=\'audio/mpeg\' src=\'\".$value.\"\' /></audio>\"; // Подключаем путь к аудио-файлу echo \"<hr><br>\"; // Переходим на 2 перехода на новую строку endforeach; DoR (25 Jun 2021 в 09:09) -MiSHuTkA-, Доброе утро! Привет:) --- Не доделали? Бывает... Ребята делали-делали, а тут раз и волки напали...)) P.S Твой код рабочий. Внёс одну поправку и пометил лишнее... Родительский класс тестился в \"боевых\" условиях на php 5.6 <?php $nf = \'20\'; // количество файлов $sort = \'up\'; // способ сортировки: up - по возрастанию, down - по убыванию $dir = \'папка с .html\'; $scandir = scandir ( $dir ); foreach ( $scandir as $v ) if ( preg_match ( \"#html$#isU\", $v ) ) { /** #html$#isU Регуляка пропускает только html файлы. Если надо пиачпи расширение, измени html на php */ $a[] = $dir.$v; $aname[] = $v; } for ( $i = 0; $i < count ( $a ); $i++ ) { $b[filemtime($a[$i])] = $a[$i]; // --- Лишнее $bname[filemtime($a[$i])] = $aname[$i]; } if($sort == \'up\') { ksort($b); // --- Лишнее ksort($bname); } if($sort == \'down\') { krsort($b); // --- Лишнее krsort($bname); } foreach ( $b as $k => $v ) { // --- Лишнее $names[] = $v; $bnames[] = $v; $filemtime[] = date(\'d:m:Y H:i:s\', $k); } // --- Лишнее foreach($bname as $v) { $bnames[] = $v; } if ( $nf > count ( $b ) ) $number = count ( $b ); else $number = $nf; for ( $i=0; $i < $number; $i++ ){ echo \'<span style=\"font-size:1.5em;\">\'.$bnames[$i].\'</span> \'.$filemtime[$i]; // --- Выводит содержимое файлов: нужно тебе или нет? $content = file_get_contents($bnames[$i]); echo \'<br />\'.$content.\'<br /><br /><br />\'; // --- Если нет, удали. } ?> -MiSHuTkA- (25 Jun 2021 в 11:29) DoR, Я на Java добавил кнопочку например чтоб выводить в тексовое поле одним кликом -вобщем простое копирование с однго текстого поля в другое в другую например в текстовое поле гостевой или админ чата ?> <sсript type=\"text/javasсript\"> function copyData(id, target_id){ document.getElementById(target_id).value = document.getElementById(id).value; }; </sсript> <? echo \"<input name=\'\' value=\'[mp3]\".$value.\"[/mp3]\' id=\'BBKOD\'size=\'43\'><br>\"; // Выводим название файла ////////////////////// ?> <input style=\"background-color: #933300; background-repeat: repeat; background-attachment: scroll; color: #FFFF00; font-style: normal; font-variant: normal; font-weight: normal; background-position: 0% 50%\" value=\"X\" onClick=\"copyData(\'BBKOD\', \'message\')\"type=\"button\"> <? message это id текстового поля админ чата у меня а там поменять любое в кнопке все Теперь думаю как сделать чтоб одна строка была всегда на выходе и старые сообщения не скапливались -MiSHuTkA- (25 Jun 2021 в 13:27) DoR, Вот рабочий пример https://coral-paradise.online/TEST2/ там кнопочка X она копирует форму ту в форму посматри Осталось сделать чтоб выводилась только всегда 1 строка BB кода всегда а не собирались все файлы ! Можеш там сказать ченить :) Выбираеш Audi потом START говариш потом STOP -нажимаеш сохранить потом Завершить -MiSHuTkA- (27 Jun 2021 в 10:08) DoR, Здарова! Возникла проблема в этом скрипте нада добавить еще расширение файла одно чтоб 2 формата было -как лучше и правильней это сделать подскажи! То я начал делать чето запутался совсем $ras = \"*.ogg\"; -тут еще формат прибавить $dir = \'uploads/\'; $ras = \"*.ogg\"; foreach ( glob ( $dir.($ras) ) as $pi ) : $_file[ filemtime ( $pi ) ] = $pi; endforeach; krsort ( $_file, SORT_NUMERIC ) .reset ( $_file ); foreach ( $_file as $key => $value ) : $unix_time = filemtime(\"\".$value.\"\"); echo \"<input name=\'\' value=\'\' size=\'50\'><br>\"; // Выводим название файла echo\"\".date(\'H:i:s - d.m.Y \', $unix_time).\"<br>\"; ///Время создания echo \"<audio controls=\'controls\'>\"; // Выводим тег аудио с панелью управления echo \"<source type=\'audio/mpeg\' src=\'\".$value.\"\' /></audio>\"; // Подключаем путь к аудио-файлу echo \"<hr><br>\"; // Переходим на 2 перехода на новую строку endforeach; DoR (27 Jun 2021 в 11:53) -MiSHuTkA-, Приветствую! --- Всё просто, создаёшь массивом список [\"*ogg\", \"*mp3\"]; ( квадратные скобки это аналог array ) И ещё, filemtime у тебя уже определенна ( $_file[ filemtime ( $pi ) ] = $pi; ) зачем вызывать ещё раз если она уже висит на ключе ( $key ) // --- Начало $dir = \'uploads/\'; $ras = [\"*ogg\", \"*mp3\"]; // --- Список foreach ( $ras as $ras ) foreach ( glob ( $dir.( $ras ) ) as $pi ) : $_file[ filemtime ( $pi ) ] = $pi; endforeach; krsort ( $_file, SORT_NUMERIC ) .reset ( $_file ); foreach ( $_file as $key => $value ) : print $value.\"<br>\"; // --- Файлы print date ( \'H:i:s - d.m.Y \', $key ).\"<br>\"; // --- Дата endforeach; // --- Конец Немного исправил, пробуй...)) -MiSHuTkA- (27 Jun 2021 в 12:12) DoR, Спасибо! Понял! Я тут решение одно внедрил и не сложно и многое решилось ! Спойлер внедрил -теперь вверху только новая запись всегда Пример https://coral-paradise.online/TEST2/ -MiSHuTkA- (27 Jun 2021 в 12:58) DoR, Посматри скрин -тестирую щас -красиво сделано там когда говариш спектр частотный типа показует -скачал с GitHub от откуда потерял Думаю нада попробывать сохраннить blob в папку uploads а дальше все наработано -красиво будет ! Реально спектр такой живой -мне еще такое не попадалось наверное лучшее что нашел и чисто заточено под звук -правда формат wav Вот живой пример сделал Там микрофон нажми спектр частотный посматри! -MiSHuTkA- (27 Jun 2021 в 13:13) DoR, Вот пример то я ссылку не кинул постом ниже https://coral-paradise.online/TEST3/ DoR (27 Jun 2021 в 15:14) -MiSHuTkA-, Сделано это при помощи createAnalyser() --- Который является методом обьекта AudioContext() AnalyserNode() извлекает частоту/форму волны и рисует это всё на canvas или на css как это я сделал в голосовых смс. Вот простой пример...)) https://docs1.w3cub.com/dom/audiocontext/createanalyser/ -MiSHuTkA- (27 Jun 2021 в 16:20) DoR, Понятно !Почитаю! Чето не пошел код $dir = \'uploads/\'; $ras = [\"*ogg\", \"*mp3\"]; // --- Список foreach ( $ras as $ras ) foreach ( glob ( $dir.( $ras ) ) as $pi ) : $_file[ filemtime ( $pi ) ] = $pi; endforeach; krsort ( $_file, SORT_NUMERIC ) .reset ( $_file ); foreach ( $_file as $key => $value ) : print $value.\"<br>\"; // --- Файлы print date ( \'H:i:s - d.m.Y \', $key ).\"<br>\"; // --- Дата endforeach; Может то что версия PHP у меня PHP Version 5.3.13 DoR (27 Jun 2021 в 17:28) -MiSHuTkA-, Да, именно из за версии пиачпи. --- Изменить под 5.3 Это: $ras = [\"*ogg\", \"*mp3\"]; Замени на это: $ras = array ( \"*ogg\", \"*mp3\" ); Позволю дать совет... Бросай чудить со старыми версиями.... Оно тебе надо?....)) -MiSHuTkA- (28 Jun 2021 в 05:48) DoR, Доброе утро! Сделал визуализацию звука там canvas небольшой в js вот пример https://coral-paradise.online/TEST2/ Плеер потом сделаю еще принцип простой! DoR (28 Jun 2021 в 07:39) -MiSHuTkA-, Доброе утро. Молодец:) --- Но обрати внимание, у тебя есть ошибки и упреждения. *AudioContext не успевает взаимодействовать с пользователем. Для ясности аналогия: --- AudioContext: твой друг. --- AudioCtx: это ты. Мимо тебя со скоростью 200 км \"пролетает\" друг на байке... Успеешь с ним обменяться какой либо информацией? Конечно нет! Судя по коду, событие onload уже не спасает, значит необходимо подгружать по клику или по иному *пользовательскому событию. --- Пример по клику: document.querySelector( \'#myDivID\' ).addEventListener( \'click\', ( ) => { audioContext = new AudioContext ( ); // --- Твой \"друг\" // --- Остальной сценарий... }); Более подробно ознакомиться можно тут: https://developers.google.com/web/updates/2017/09/autoplay-policy-changes#webaudio С ошибками 404, думаю справишься без меня...)) -MiSHuTkA- (28 Jun 2021 в 11:29) DoR, Исправил несуществующие файлы остольное потом гляну Там последний файл с папки попадает в такой скрипт -через переменную $value и получается визуализация звука За основу это применил файл посматри! так у меня только echo \"<audio src=\'\".$value.\"\' id=\'player\' controls loop crossorigin=\'anonymous\' type=\'audio/mp3\'></audio>\"; // Выводим тег аудио с панелью управления ?> <canvas id=\"myCanvas\" width=1000= height=250></canvas> -MiSHuTkA- (29 Jun 2021 в 22:23) DoR, Доброй ночи! Не подскажеш по этой статье https://question-it.com/questions/1202015/zapis-audio-s-ispolzovaniem-mikrofona-polzovatelja-s-html5 Вроде все ясно но не работает непойму где var blob = null; прописать там красивый этот пример https://coral-paradise.online/TEST3/ как раз описуется как сохранить blob в файл пишут объявите переменную blob вне устройства записи js следующим образом: var blob = null; --??? куда ее именно нада непойму -MiSHuTkA- (30 Jun 2021 в 08:33) DoR, Такое сохранение файла взял отсюда https://stackovernet.xyz/ru/q/4574293 <html> <head> <sсript src=\"js/recorderjs/recorder.js\"></sсript> <sсript src=\"js/main.js\"></sсript> <sсript src=\"http://code.jquery.com/jquery-latest.min.js\"></sсript> </head> <body> <img id=\"record\" src=\"mic.png\" onclick=\"toggleRecording(this);\"><br> <img src=\"save.svg\" onclick=\"saveAudio();\"> <form action=\"savefile.php\" method=\"post\"> <input type=\"submit\" value=\"Submit\"> </form> </body> </html> и <?php $save_folder = dirname(__FILE__) . \"/audio\"; if(! file_exists($save_folder)) { if(! mkdir($save_folder)) { die(\"failed to create save folder $save_folder\"); } } $key = \'filename\'; $tmp_name = $_FILES[\"audiofile\"][\"tmp_name\"]; $upload_name = $_FILES[\"audiofile\"][\"name\"]; $type = $_FILES[\"audiofile\"][\"type\"]; $filename = \"$save_folder/$upload_name\"; $saved = 0; if(($type == \'audio/x-wav\' || $type == \'application/octet-stream\') && preg_match(\'/^[a-zA-Z0-9_-]+.wav$/\', $upload_name) ) { $saved = move_uploaded_file($tmp_name, $filename) ? 1 : 0; } ?> Источник: http://www.dcms-social.ru/forum/14/50/63304/