Имя: Пароль:
1C
 
Воспроизведение звука HTML
☑
0 Shalun
 
naïve
01.10.26
✎
19:19
Всем привет! Второй день долблюлюсь с воспроизведением звука, но сцука молчит как партизан. Сразу скажу, опыта со звуком нет, по сему сильно не пеняйте.
Что сделал: В управляемую форму добавил реквизит АудиоПлеерHTML с типом Строка и элемент формы ПолеHTMLДокумента, связанный с этим реквизитом.
Создал макет двоичные данные, и загрузил в него звук.
Далее код:

&НаСервере
Функция ПолучитьЗвукиВФорматеBase64()
    Результат = Новый Структура;
    ДД_Успех = ПолучитьОбщийМакет("ЗвукУспешногоСканирования");
    ДД_Ошибка = ПолучитьОбщийМакет("ЗвукОшибкиСканирования");
    
    Результат.Вставить("Успех", Base64Строка(ДД_Успех));
    Результат.Вставить("Ошибка", Base64Строка(ДД_Ошибка));
    
    Возврат Результат;
    
КонецФункции

&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
    
    ЗвуковыеСемплы = ПолучитьЗвукиВФорматеBase64();
    ЗвукУспехаBase64 = ЗвуковыеСемплы.Успех;
    ЗвукОшибкиBase64 = ЗвуковыеСемплы.Ошибка;
    АудиоПлеерHTML =
        "<!DOCTYPE html>
        |<html>
        |<head>
        |    <meta charset='utf-8'>
        |    <script>
        |        function playSound(base64Data, mimeType) {
        |            try {
        |                var audio = new Audio('data:' + mimeType + ';base64,' + base64Data);
        |                audio.play();
        |            } catch(e) {
        |                console.error('Audio playback error:', e);
        |            }
        |        }
        |    </script>
        |</head>
        |<body style='margin:0; padding:0; background:transparent;'></body>
        |</html>";
        
КонецПроцедуры

&НаКлиенте
Процедура ВоспроизвестиЗвуковойСигнал(ТипСигнала = "Успех")
    СтрокаBase64 = ?(ТипСигнала = "Успех",   ЗвукУспехаBase64, ЗвукОшибкиBase64);
    МеткаВремени = Формат(ТекущаяУниверсальнаяДатаВМиллисекундах(), "ЧГ=0");
    АудиоПлеерHTML =
        "<!DOCTYPE html>
        |<html>
        |<head><meta charset='utf-8'></head>
        |<body style='margin:0; padding:0; background:transparent;'>
        |    <!-- Timestamp: " + МеткаВремени + " -->
        |    <audio autoplay='autoplay'>
        |        <source src='data:audio/mp3;base64," + СтрокаBase64 + "' type='audio/mpeg'>
        |    </audio>
        |</body>
        |</html>";
КонецПроцедуры

В общем, ошибки никакой не всплывает, но звука нет. Подскажите, что тут не так? Скажу сразу, скрипт взят с интернета, сам не пишу, по этому не спрашивайте что там зачем. Лучше подскажите что нужно делать? Заранее благодарю за конструктивные ответы!
1 Волшебник
 
01.10.26
✎
19:30
если это мобильный клиент (ТСД, например), то используйте:
 СредстваМультимедиа.ВоспроизвестиАудио(...)

или даже
СредстваМультимедиа.ВоспроизвестиТекст("Марка ОК")
2 sikuda
 
01.10.26
✎
19:38
(0) Статью десять лет назад написал, добрые люди уже добавил беслатную обработочку для старждущих и тонкости описали, но нет лень матушка у Вас?
https://infostart.ru/1c/tools/1259789/
3 Fragster
 
гуру
01.10.26
✎
21:02
с видео была тема, что autoplay в браузере срабатывал только "после первого интерактивного действия со страницей", может с аудио примерно то же самое