[ID CS4-CS6] Beep

Статус
Закрыто для дальнейших ответов.

_MBK_

Пикирующий бомбардировщик
15 лет на форуме
Сообщения
33 272
Реакции
10 862
Системный пип - это исполнение той же программой файла из SystemDisk/System/Library/Sounds/, поэтому говорить о тормозах не стоит. afplay запускается при загрузке компьютера и постоянно сидит в памяти.
Говорящий компьютер, конечно, интересней, но говорилка как раз тормозит больше - пока не выговорится скрипт дальше не пойдет, а по do shell script... исполнение скрипта не останавливается.
Лично я б не стал использовать системную говорилку. Правильнее записать аудиофайл и проигрывать его.
 

bossrus

шибка умный, аднака
Топикстартер
12 лет на форуме
Сообщения
447
Реакции
74
Лично я б не стал использовать системную говорилку. Правильнее записать аудиофайл и проигрывать его.
почему?

Попробую реабилитироваться. Продолжу экстрим для MacOS:
Код:
app.doScript('do shell script "/usr/bin/afplay /Users/user/Library/Sounds/MySound.aif"', ScriptLanguage.APPLESCRIPT_LANGUAGE);
Воспроизводит файл "MySound.aif" из фолдера Sounds пользовательской библиотеки.
для воспроизведения файла — у всех клиентов путь должен быть одинаковым. но так уж исторически получилось, что в пути к общей папке содержат русские символы. а эта команда эти символы вообще не понимает. и менять это не получится. слишком во многих местах этот путь прописан.

печаль. я даже .aif скачал, а тут такой облом.
 

_MBK_

Пикирующий бомбардировщик
15 лет на форуме
Сообщения
33 272
Реакции
10 862
у всех клиентов путь должен быть одинаковым. но так уж исторически получилось, что в пути к общей папке содержат русские символы. а эта команда эти символы вообще не понимает
Так это уже совершенно другого рода проблема и решение здесь когда то пробегало.
Другое дело, что я сходу не нашел, а у самого мака нет проверить.
Но заставить shell скрипт понимать русские символы в путях точно можно.
 

apg_777

15 лет на форуме
Сообщения
278
Реакции
81
пути к общей папке содержат русские символы
Но заставить shell скрипт понимать русские символы в путях точно можно.
Можно, достаточно "заапострофить" путь с файлом:
Код:
var ccc = 'do shell script "/usr/bin/afplay ';
var fff = "'/Volumes/Common files/Ну, погоди!/01-01 Red Elvises - Hungarian Dance #5.mp3'";
var ppp = ccc + fff + '"';
app.doScript(ppp, ScriptLanguage.APPLESCRIPT_LANGUAGE);
Могут быть проблемы с символами типа "š".

И сразу в кучу про afplay:
Usage:
afplay [option...] audio_file
Options: (may appear before or after arguments)
{-v | --volume} VOLUME
set the volume for playback of the file
{-h | --help}
print help
{ --leaks}
run leaks analysis
{-t | --time} TIME
play for TIME seconds
{-r | --rate} RATE
play at playback rate
{-q | --rQuality} QUALITY
set the quality used for rate-scaled playback (default is 0 - low quality, 1 - high quality)
{-d | --debug}
debug print output
 
  • Спасибо
Реакции: _MBK_

bossrus

шибка умный, аднака
Топикстартер
12 лет на форуме
Сообщения
447
Реакции
74
не идёт чегой-т.
Screen shot 2016-07-13 at 16.16.05.png
содержимое scr:
Screen shot 2016-07-13 at 16.15.58.png
 

_MBK_

Пикирующий бомбардировщик
15 лет на форуме
Сообщения
33 272
Реакции
10 862
А по мне, так с кавычками у вас явно какая то чехарда 'hmmm'
Если в этом же скрипте путь латиницей будет - играет?
 

bossrus

шибка умный, аднака
Топикстартер
12 лет на форуме
Сообщения
447
Реакции
74
А по мне, так с кавычками у вас явно какая то чехарда 'hmmm'
неа. с кавычками там всё очень даже ок :)
\" — вставляет символ кавычек в строку, обрамлённую кавычками
Если в этом же скрипте путь латиницей будет - играет?
да. если меежду апострофов вставить путь, скажем, к рабочему столу — /Users/vbulykin/Desktop/Clink-Beep.aiff
всё играет нормально.
 

_MBK_

Пикирующий бомбардировщик
15 лет на форуме
Сообщения
33 272
Реакции
10 862
А относительный путь не понимает?
 

apg_777

15 лет на форуме
Сообщения
278
Реакции
81
Протестировать правильность строки можно в Терминале. Скопировать от /usr до aiff' (с апострофом!) и запустить в терминале. Зачирикает - проблема в скрипте, не зачирикает - проверять пути/кавычки.
Правильный путь удобней получить с помощью AppleScript'а, путь к файлу оказывается в клипборде, скрипт можно сохранить как программу:
Код:
set theFile to (choose file) as text
set the clipboard to POSIX path of theFile
И еще. Я бы заменил внешние кавычки на апострофы.
 

bossrus

шибка умный, аднака
Топикстартер
12 лет на форуме
Сообщения
447
Реакции
74
Протестировать правильность строки можно в Терминале. Скопировать от /usr до aiff' (с апострофом!) и запустить в терминале. Зачирикает - проблема в скрипте, не зачирикает - проверять пути/кавычки.
в терминале чирикает.
а из вёрстки чирикает только вариант без русских букв.

И еще. Я бы заменил внешние кавычки на апострофы.
заменил. даже в нескольких местах
Код:
app.doScript('do shell script \"/usr/bin/afplay \'/Volumes/studio/VERSTKA-НЕ-УДАЛЯТЬ!/scripts/Clink-Beep.aiff\'\"',
даёт тот же результат
Код:
app.doScript("do shell script '/usr/bin/afplay \"/Volumes/studio/VERSTKA-НЕ-УДАЛЯТЬ!/scripts/Clink-Beep.aiff\"'",
вообще выдаёт ошибку
Screen shot 2016-07-14 at 13.25.45.png
 

_MBK_

Пикирующий бомбардировщик
15 лет на форуме
Сообщения
33 272
Реакции
10 862
Хорошо, (я конечно, понимаю, что совсем изврат), а что если в уникод перекодировать русские символы типа \x0...\x0... ?
 

apg_777

15 лет на форуме
Сообщения
278
Реакции
81
@bossrus, у меня через строки 44-го сообщения результирующая строка получается
Код:
do shell script "/usr/bin/afplay '/Volumes/work/VERSTKA-НЕ-УДАЛЯТЬ!/scripts/Clink-Beep.aiff'"
Названия каталогов скопированы, а не набраны. Думаю, что название диска не критично.
Работает.
 

bossrus

шибка умный, аднака
Топикстартер
12 лет на форуме
Сообщения
447
Реакции
74
@bossrus, у меня через строки 44-го сообщения результирующая строка получается
Код:
do shell script "/usr/bin/afplay '/Volumes/work/VERSTKA-НЕ-УДАЛЯТЬ!/scripts/Clink-Beep.aiff'"
Названия каталогов скопированы, а не набраны. Думаю, что название диска не критично.
Работает.
из терминала? так из терминала и у меня работает.

по твоему совету в пм я сделал эксперимент, исключающий неправильный синтаксис:
переименовал файл в click.aiff. вставил в скрипт
Код:
app.doScript("do shell script \"/usr/bin/afplay '/Users/vbulykin/Desktop/click.aiff'\"", ScriptLanguage.APPLESCRIPT_LANGUAGE);
работает.
поменял руками на
Код:
app.doScript("do shell script \"/usr/bin/afplay '/Users/vbulykin/Desktop/клик.aiff'\"", ScriptLanguage.APPLESCRIPT_LANGUAGE);
(изменил только 4 символа — уже никак не объяснишь неправильностью кавычек) — и не работает.
 

Oleg Butrin

20 лет на форуме
Сообщения
1 990
Реакции
1 216
(изменил только 4 символа — уже никак не объяснишь неправильностью кавычек) — и не работает.
Одно страшное слово: "кодировка".
Как вариант
Код:
app.doScript("do shell script \"/usr/bin/afplay " + File('/Users/vbulykin/Desktop/клик.aiff').absoluteURI +"\"", ScriptLanguage.APPLESCRIPT_LANGUAGE);
но вряд ли.
 

_MBK_

Пикирующий бомбардировщик
15 лет на форуме
Сообщения
33 272
Реакции
10 862
А в hex коды все таки не пробовали перекодировать кириллицу? Я смотрю, у вас в скрипте %20 прекрасно за пробел идет, может и с русскими юникодными символами такое прохиляет? 'hmmm'
 

Oleg Butrin

20 лет на форуме
Сообщения
1 990
Реакции
1 216
А в hex коды все таки не пробовали перекодировать кириллицу?
При запуске команды в консоли текст принудительно будет перекодирован.
Можно запустить вот такое:
PHP:
 app.doScript('do shell script "echo /Users/vbulykin/Desktop/клик.aiff "', ScriptLanguage.APPLESCRIPT_LANGUAGE);
и посмотреть на результат.
 

bossrus

шибка умный, аднака
Топикстартер
12 лет на форуме
Сообщения
447
Реакции
74
А в hex коды все таки не пробовали перекодировать кириллицу? Я смотрю, у вас в скрипте %20 прекрасно за пробел идет, может и с русскими юникодными символами такое прохиляет? 'hmmm'
Код:
app.doScript("do shell script \"/usr/bin/afplay '/Users/vbulykin/Desktop/%u043A%u043B%u0438%u043A.aiff'\"", ScriptLanguage.APPLESCRIPT_LANGUAGE);
не пошло
 
Статус
Закрыто для дальнейших ответов.