[Практически решено]Воспроизведение звуков в Calc

Автор Massaraksh7, 2 июня 2024, 05:57

0 Пользователи и 1 гость просматривают эту тему.

Massaraksh7

Как в Calc воспроизвести звук (wav или mp3) из макроса?

economist

Мой выбор pyaudio или soundfile из Python.
Руб. за сто, что Питоньяк
Любит водку и коньяк!
Потому что мне, без оных, -
Не понять его никак...

Massaraksh7


economist

#3
Если не везде работающий Beep не устроил и задача широкая (Win/Lin/Mac-среда, разные CPU-платформы) то придется потратить 8-40 часов на эксперименты с Shell и системными проигрывателями. Там ожидает много интересного и не очень, но результат будет.

В современном IT становится важным странное: вовремя перейти на нужный и понимаемый/преодолимый уровень абстракции. Для кого-то, после кода-лапши копипасты/макрорекординга это будут первые собственные UDF. Для других будут Classes/ООП, а кто-то мыслит уже исключительно категориями облаков/оркестраторов/виртуализации/GPT.

Так случайно вышло что долгие годы "ничей" Python стал "универсальным клеем" технологий, т.е. тоже некоей абстракцией над всем технологическим стеком. Чем вызвал лютую зависть BAT/VBS/VBA/BASH-портяночников, поднявшихся на этом всём в уже далекие нулевые (и местами успешно почивающим на всем этом до сих пор). Часть из них приняла правила игры, другая - нет, осталась сторонницей "чистых решений", даже кратно более трудозатратных. Таких не "подсидишь", жизни не хватит. И не переубедишь. Там, в их вечном коде - на 10k строк два комментария, призванных запутать, и все такое.   

А истинная рациональность состоит в том чтобы смело переходить на те уровни абстракции, которые дают длительные результат проще и быстрее, без вендор-лок и привязки к "незаменимым". То есть на базе СПО и максимально неспецифическом.

Мы доживем до глубокого заката VBS/VBA, а значит и StarBasic/LO Basic. Сами они никуда не денутся, но дергать команды мы будем через что-то более высокоуровневое, как того потребует время.

Руб. за сто, что Питоньяк
Любит водку и коньяк!
Потому что мне, без оных, -
Не понять его никак...

Massaraksh7


Massaraksh7

Ладно, python, так python. Но тогда почему этот код:
...
from playsound import playsound

playsound('c:/laz-aep/chess/clc.mp3')
...
говорит, что не может найти эту библиотеку?

economist

Ваш питон может не найти аж 545746 пакетов. Их все нужно перед импортом установить.

Сначала поставьте pip в LO Python и верните вырезанные либы (тема про Pandas). Затем можно поставить либы, воспроизводящие звук, их несколько.

Имена либ не должны особо обнадёживать - они могут играть звук на единственном компьютере в мире (у автора) и это четкий сигнал к поиску нескольких решений.
Руб. за сто, что Питоньяк
Любит водку и коньяк!
Потому что мне, без оных, -
Не понять его никак...

Massaraksh7

Цитата: economist от  2 июня 2024, 17:37Их все нужно перед импортом установить.
Зачем? Мне не нужно, чтобы скрипт работал только на моём компьютере.
Ладно, буду искать другие варианты.
Цитата: economist от  2 июня 2024, 16:22Если не везде работающий Beep не устроил
Да, он выдаёт приветствие Windows, на фига оно мне? Мне нужен короткий щелчок, его mp3 я нашёл.

Massaraksh7

Вообще, идея такая. В свободное от работы время (но его мало), хочу реализовать.

Massaraksh7

Ну, в общем-то, такой код звук воспроизводит, но показывает и инструмент воспроизведения, которым мне и даром не нужен, чтобы лицезреть его.
Srv = createUnoService("com.sun.star.system.SystemShellExecute")
Srv.Execute("C:\Laz-aep\Chess\clc.mp3","",0)

Massaraksh7

#10
Таки, есть, оказывается, правильный способ, с форума Apache Open Office (чуть подредактировал под свои потребности):
Sub DoSnap
   PlaySound("C:\Laz-aep\Chess\clc.mp3")
End Sub

Sub PlaySound(i_soundpath as string)
     dim oPlayer1 as object
     dim sUrlSound as string
     dim oSounMgr as object
     
     if not isnull(oSounMgr) then
         S_Start_New
         exit sub
     endif
     
     sUrlSound = ConvertToUrl(i_soundpath)
     If not fileexists(sUrlSound) Then       
         msgbox sUrlSound & " does not exist",16
     else
        If GetGuiType() = 1 Then
            oSounMgr = CreateUnoService("com.sun.star.media.Manager_DirectX")
        Else
    '.comp. was not documented !!
            oSounMgr = CreateUnoService("com.sun.star.comp.media.Manager_GStreamer")
        End If

        If IsNull(oSounMgr) Then
           msgbox "Sound Mgr not set",16
        else
            oPlayer1 = oSounMgr.createPlayer(sUrlSound)
            oPlayer1.setMediaTime(0.0)
            oPlayer1.setVolumeDB(0)
            oPlayer1.setPlayBackLoop( 0 )
            oPlayer1.start(0)

            wait 200
            oPlayer1 = nothing
            oSounMgr = nothing
        End If
     End If
End Sub
https://forum.openoffice.org/en/forum/viewtopic.php?t=57699

mikekaganski

С уважением,
Михаил Каганский

sokol92

Цитата: Massaraksh7 от  3 июня 2024, 04:31Таки, есть, оказывается, правильный способ, с форума Apache Open Office
... и этот способ предложен @hanya.  :)
Очень жаль, что @hanya в настоящее время не занимается LO.
Владимир.