Низкоуровневое программирование звука в Windows. Ошибки iTunes (причины и решения)

Ошибка компиляции в программе Adobe Premiere Pro является одной из самых популярных среди пользователей. Отображается она при попытке экспортировать созданный проект на компьютер. Процесс может прерваться сразу или через определенное время. Давайте разберемся в чем же дело.

Почему возникает ошибка компиляции в программе Adobe Premiere Pro

Ошибка кодека

Довольно часто эта ошибка возникает из-за несоответствия формата для экспорта и установленного в системе пакета кодеков. Для начала попробуйте сохранить видео в другом формате. Если нет, удалите предыдущий пакет кодеков и установите новый. Например QuickTime , который хорошо сочетается с продуктами из линейки Adobe.

Заходим в «Панель управления-Установка и удаление программ» , находим ненужный пакет кодеков и удаляем стандартным способом.

Затем идем на официальный сайт QuickTime , скачиваем и запускаем установочный файл. После завершения инсталляции перегружаем компьютер и запускаем Adobe Premiere Pro.

Недостаточно свободного места на диске

Это часто случается при сохранении видео в определенные форматы. В результате файл становится очень большой и просто не помещается на диске. Определите соответствует ли объем файла свободному месту в выбранном разделе. Заходим в мой компьютер и смотрим. Если места не хватает, тогда удаляем лишнее с диска или экспортируем в другом формате.

Или экспортируем проект в другое место.

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

Изменить свойства памяти

Иногда причиной данной ошибки может послужить нехватка памяти. В программе Adobe Premiere Pro есть возможность немного увеличить ее значение, однако следует отталкиваться от объема общей памяти и оставить какой-то запас для работы других приложений.

Заходим в «Edit-Preferences-Memory-RAM available for» и выставляем нужное значение для Premiere.

Нет прав для сохранения файлов в этом месте

Вам необходимо обратится к администратору системы для снятия ограничения.

Имя файла не является уникальным

При экспорте файла на компьютер, он должен иметь уникальное название. Иначе он не будет перезаписан, а просто выдаст ошибку, в том числе и компиляции. Это часто возникает когда пользователь сохраняет один и тот же проект повторно.

Бегунки в разделах Sourse и Output

При экспорте файла, в левой его части есть специальные бегунки, которые регулируют длину видео. Если они выставлены не на полную длину, а при экспорте возникает ошибка, выставьте их на начальные значения.

Решение проблемы сохраняя файл частями

Довольно часто при возникновении данной проблемы пользователи сохраняют видео файл частями. Для начала его нужно разрезать на несколько частей используя инструмент «Лезвие» .

Затем с помощью инструмента «Выделение» отмечаем первый отрывок и экспортируем его. И так со всеми частями. После чего части видео опять загружаются в программу Adobe Premiere Pro и соединяются. Зачастую проблема исчезает.

Неизвестные ошибки

Если ничего не помогло, необходимо обратиться в службу поддержки. Так как в Adobe Premiere Pro часто случаются ошибки, причина которых относится к ряду неизвестных. Решить их обычному пользователю не всегда представляется возможным.

Почти каждый пользователь iTunes сталкивался с тем, что программа отказывалась выполнять какое-либо действия и показывала всплывающее окно с номером возникшей ошибки...

Что означают эти ошибки iTunes и как решать возникшие проблемы – об этом ниже…

Причина ошибки 1: Версия iTunes слишком старая или прошивка не соответсвует устройству.

Решение ошибки 1: Обновите iTunes до последней версии, скачайте прошивку заново (убедитесь, что скачиваете версию ПО для нужного устройства).

Причина ошибки 2: Загруженная прошивка запакована неправильно.

Решение ошибки 2: Скорей всего, Вы пытаетесь установить custom прошивку (не оригинальной сборки). Просто скачайте оригинальную прошивку, либо используйте сторонний софт для установки custom прошивок.

Причина ошибки 3: Данную ошибку пользователь может наблюдать по завершению прошивки iPhone, iPad, что может свидетельствовать о неисправном модеме внутри девайса.

Решение ошибки 3: По сути, ошибка является аналогичной ошибке -1 и если последняя исправляться режимом восстановления, то решить ошибку №3 могут только в сервисном центре путем замены модема.

Причина ошибки 5: Прошивка устанавливается не в том режиме, для которого она предназначена. (DFU Mode/Recovery Mode).

Решение ошибки 5:

Причина ошибки 6: Ошибка установки прошивки из-за поврежденного Boot/Recovery logo (возникает при установки custom прошивок). Решение ошибки 6: Скачайте оригинальную прошивку, или попробуйте установить в разных режимах (DFU Mode/Recovery Mode).
Причина ошибки 8: iTunes не может установить прошивку, из-за того, что она неподходит к данному устройства (например устанавливаете прошивку от iPod Touch на iPhone).

Решение ошибки 8: Скачайте оригинальную прошивку для Вашей модели устройства.

Причина ошибки 9: Kernel Panic. Критическая ошибка ядра. Аналог синего экрана Windows. Может возникнуть при обрыве передачи данных по кабелю в момент установки. Или при использовании плохо собранной custom прошивки.

Решение ошибки 9: Проверьте USB порт и разъем на iPhone/iPad/iPod Touch.

Причина ошибки 10: В прошивке не обнаружено LLB (Low Level Bootloader), установка невозможна.

Решение ошибки 10: Пересоберите custom прошивку или используйте оригинальную.

Причина ошибки 11: В прошивке не обнаружены часть файлов.

Решение ошибки 11: Пересоберите custom прошивку или используйте оригинальную.

Причина ошибки 13: Кабель или USB порт поврежден. Либо beta версию iOS пытаетесь установить из под Windows.

Решение ошибки 13: Поменяйте USB и кабель. Так же может помочь отключение USB 2.0 в BIOS.

Причина ошибки 14: Нарушен файл прошивки. Либо проблема кабеля или USB-порта.

Решение ошибки 14: Отключите антивирус. Поменяйте USB и кабель. Попробуйте оригинальную прошивку.

Причина ошибки 17: Попытка обновить не оригинальную прошивку (custom).

Решение ошибки 17: В таком случае необходимо восстановить девайс из DFU или Recovery Mode.

Причина ошибки 20: Девайс находится в Recoveru Mode.

Решение ошибки 20: В этом случае необходимо войти в DFU Mode.

Причина ошибки 26: Ошибки при сборки прошивки.

Решение ошибки 26: Загрузить другую прошивку.

Причина ошибки 27 и 29: Ошибка iTunes, которая встречается в старых версиях программы.

Решение ошибки 27 и 29: Обновить iTunes до последней версии.

Причина ошибки 28: Неисправность 30-pin/Lightning-кабеля или разъема в устройстве.

Решение ошибки 28: Ремонт в сервисном центре или заменя 30-pin/Lightning-кабеля.

Причина ошибки 34: Недостаточно места для установки ПО (на жестком диске).

Решение ошибки 34: Освободите немного места для установки ПО (на диске, где установлен iTunes).

Причина ошибки 35: Некорректные права доступа к папке (проблема встречается на Mac OS).

Решение ошибки 35: В terminal.app вводим:
sudo chmod -R 700 /Users//Music/iTunes/iTunes Media
, где - имя пользователя.

Причина ошибки 39: Ошибка возникает при синхронизации фотографий.

Решение ошибки 39: Несколько ваших фотографий вызывают эту ошибку, нужно найти их методом исключения из синхронизации.

Причина ошибки 40, 306, 10054: Проблемы с соединением с сервером.

Решение ошибки 40, 306, 10054: Необходимо отключить антивирусное ПО, прокси, почистить кэш браузера.

Причина ошибки 54: Возникает при переносе покупок с устройства в iTunes.

Решение ошибки 54: Можно попробовать ряд действий:

  • iTunes > магазин > Авторизировать этот компьютер
  • Удалить C:\Documents and Settings\All Users\Application Data\Apple Computer\iTunes\SC Info
  • Исключить из синхронизации музыку путем удаления папки (потом можно вернуть папку на место)
Причина ошибки 414: Контент предназначен для лиц старше 17 лет.

Решение ошибки 414: Согласиться с такими правилами или изменить дату рождения в настройках аккаунта.

Причина ошибки 1004: Временные проблемы сервера Apple.

Решение ошибки 1004: Прошиться позже.

Причина ошибки 1008: Apple ID имеет недопустимые символы.

Решение ошибки 1008: Чтобы такая ошибка не возникала, необходимо использовать в Apple ID только латинские буквы и цифры.

Причина ошибки 1011, 1012: Проблема модема iPhone/iPad.

Решение ошибки 1011, 1012: Аппаратная проблема, требует ремонта.

Причина ошибки 1013, 1014, 1015: При проверки прошивки, после обновления, возникла ошибка несоответствия.

Решение ошибки 1013, 1014, 1015: Нужно скачать утилиту TinyUmbrella. В ней использовать функцию Kick Device Out of Recovery.

Причина ошибки 1050: Серверы активации Apple временно недоступны.

Решение ошибки 1050: Активировать устройство через некоторое время.

Причина ошибки 1394: Файлы операционной системы устройства повреждены.

Решение ошибки 1394: Восстановить устройство или попробовать сделать jailbreak повторно, если ошибка появилась после него.

Причина ошибки 14**: Ошибка передачи данных по кабелю.

Решение ошибки 14**: Либо нарушен файл прошивки (нужно скачать другую), либо сломался usb кабель.

Причина ошибки 1600, 1611: Ошибка встречается при установки custom прошивок через DFU mode.

Решение ошибки 1600, 1611: Попробуйте установить через Recovery Mode.

Причина ошибки 1609:

Решение ошибки 1609:

Причина ошибки 1619: iTunes слишком старый для Вашего устройства.

Решение ошибки 1619: Обновите iTunes до последней версии.

Причина ошибки 1644: К файлу прошивки обращаются сторонние программы.

Решение ошибки 1644: Перезагрузите компьютер, выключите антивирусы, если Вы не сами работаете с файлом прошивки.

Причина ошибки 2001: Ошибка встречается на Mac OS. Проблема с драйверами.

Решение ошибки 2001: Обновить Mac OS.

Причина ошибки 2002: Сторонние процессы работают с iTunes, тем самым блокирует доступ.

Решение ошибки 2002: Если это не антивирус, то перезагрузите компьютер.

Причина ошибки 2003: Проблемы с USB портом.

Решение ошибки 2003: Используйте другой USB порт.

Причина ошибки 2005: Проблемы с data-кабелем.

Решение ошибки 2005: Используйте другой data-кабель.

Причина ошибки 2502 и 2503: Ошибки установщика из за ограниченного доступа к временным файлам. Встречается на Windows 8.

Решение ошибки 2502 и 2503: Проблема решается добавлением полного доступа пользователю к папке C:\Windows\Temp. Делается это следующим образом:

  • нажимаем правой кнопкой мыши по папке C:\Windows\Temp;
  • идем по пути «Свойства – Безопасность – Изменить» и выбираем своего пользователя;
  • ставим галочку напротив «Полный доступ», после необходимо сохранить изменения.
Причина ошибки 3000, 3004, 3999: Ошибка доступа к серверу Apple.

Решение ошибки 3000, 3004, 3999: Доступ блокирован какой-либо программой. Например антивирусной. Отключите их, перезагрузитесь.

Причина ошибки 3001, 5103, -42110: iTunes не может загрузить видео из-за ошибок хеширования.

Решение ошибки 3001, 5103, -42110: Обновите iTunes
Удалите папку SC Info:

  • Win7 – C:\Documents and Settings\All Users\Application Data\Apple Computer\iTunes
  • Vista – C:\Program Data\Apple Computer\iTunes
  • Mac OS – /users/Shared/SC Info
Причина ошибки 3002, 3194: Нет сохраненных хешей на сервере. (Apple или Саурика).

Решение ошибки 3002, 3194: Обновитесь на стабильную версию прошивки. Удалить строку: 74.208.105.171 gs.apple.com из файла hosts в:

  • Win – C:\Windows\System32\drivers\etc\hosts
  • Mac OS – /etc/hosts
Выключите антивирусы, пробуйте восстанавливать через shift. Также ошибка может возникнуть при попытке отката на предыдущую версию iOS. В последнее время даунгрейд невозможен, спокойно обновляйтесь на последнюю версию iOS. Сложная ошибка, разъяснения по которой были выделены в отдельную статью – .
Причина ошибки 3123: Проблемы с авторизацией компьютера в iTunes.
Причина ошибки 3195: Ошибка при получении SHSH.

Решение ошибки 3195: Повторите попытку обновления прошивки.

Причина ошибки 5002: Отказ платежа.

Решение ошибки 5002: Ищите ошибки в заполненных данных банковской карты.

Причина ошибки 8008, -50, -5000, -42023: Истекло время сессии закачки прошивки.

Решение ошибки 8008, -50, -5000, -42023: Удалите папку Downloads в Вашей папки iTunes Media.

Причина ошибки 8248: Проблема возникает если установлены плагины для iTunes, которые несовместимы с новыми версиями программы.

Решение ошибки 8248: Удалите плагины iTunes. Часто случается, что проблема в процессе Memonitor.exe, закройте его.

Причина ошибки 9006: Что-то блокирует закачку прошивки.

Решение ошибки 9006: Скачайте прошивку из другого места, либо решите проблему с антивирусами.

Причина ошибки 9807: Что-то блокирует проверку подписей и сертификатов.

Решение ошибки 9807: Решите проблему с антивирусами.

Причина ошибки 11222: Блокирован доступ.

Решение ошибки 11222: Отключите брандмауэр и антивирус.

Причина ошибки 13014, 13136, 13213: Что-то мешает работе iTunes.

Решение ошибки 13014, 13136, 13213: Обновите iTunes, перезагрузите компьютер, выключите антивирусное ПО. Проблема должна исчезнуть.

Причина ошибки 13001: Файл медиатеки поврежден.

Решение ошибки 13001: Удалите файлы медиатеки iTunes.

Причина ошибки 20000: Ошибка может возникнуть при использовании нестандартной темы Windows.

Решение ошибки 20000: Установите стандартную тему Windows.

Причина ошибки -39: iTunes не может загрузить музыку из iTunes Store.

Решение ошибки -39:

Причина ошибки -50: Возникли проблемы при соединении с сервером itunes.apple.com.

Решение ошибки -50: Обновите iTunes. Сделайте релогин аккаунта. Выключите антивирусное ПО.

Причина ошибки -3259: Превышено время ожидания, отведенного на подключение.

Решение ошибки -3259: Обновите iTunes. Проверьте наличие соединения с интернетом. Удалите незавершенные загрузки, может помочь выход/вход в аккаунт iTunes. Если не помогло, пробуйте перезагрузить компьютер.

Причина ошибки -9800, -9812, -9815, -9814: Не правильно выставлено время и дата в системе.

Решение ошибки -9800, -9812, -9815, -9814: Выставите, в настройках системы, правильные дату и время.

Причина ошибки 0xE8000022: Повреждены файлы iOS.

Решение ошибки 0xE8000022: Восстановите прошивку.

Причина ошибки 0xE8000001, 0xE8000050:

Решение ошибки 0xE8000001, 0xE8000050: Переустановите твик AppSync из Cydia.

Причина ошибки 0xE8008001: Проблема возникает при установке приложений на джейлбрейкнутом устройстве.

Решение ошибки 0xE8008001: Установите твик AppSync из Cydia.

Причина ошибки 0xE8000013: Ошибка синхронизации.

Решение ошибки 0xE8000013: Синхронизируйте устройство повторно.

Причина ошибки 0xE8000065: Ошибка в операционной системе.

Решение ошибки 0xE8000065: Перезагрузите компьютер, используйте другой USB-порт. Если не помогло, значит проблема в iTunes и потребуется восстановление прошивки.

Если вы не нашли ответа на свой вопрос или у вас что-то не получилось, а в комментаряих ниже нет подходящего решения, задайте вопрос через нашу

По желанию программы звуковая подсистема может использовать три варианта уведомлений: установку объекта программного события (event), вызов заданной программной функции (callback) либо посылку сообщения заданному окну или задаче (thread). В первом варианте программа получает информацию лишь о самом факте некоторого события в звуковой подсистеме и сама должна выяснить, что именно произошло; во втором и третьем вариантах передаются код события и уточняющая информация.

Звуковая подсистема передает программе уведомления о событиях трех видов: успешное открытие устройства, успешное его закрытие и завершение обработки очередного буфера из очереди драйвера. Строго говоря, полностью асинхронным является только последнее событие; первые два возникают сразу же после успешного открытия и закрытия устройства и передаются в программу еще до возврата из соответствующих интерфейсных функций.

Уведомление посылкой сообщения окну или задаче

Звуковая подсистема посылает заданному окну или задаче сообщение Windows, код которого отражает наступившее событие, передавая в параметрах сообщения ключ открытого звукового устройства и дополнительную информацию о событии. Сообщение посылается асинхронно при помощи функций PostMessage или PostThreadMessage и выбирается из очереди окна или задачи наравне с прочими сообщениями Windows.

Имена констант для кодов сообщений имеют вид MM_WxM_event , где x - тип устройства (буква I - для устройства ввода или O - для устройства вывода), а event - тип события:

Сообщения MM_WxM_OPEN и MM_WxM_CLOSE посылаются устройствам обоих типов, а MM_WIM_DATA и MM_WOM_DONE - только устройствам ввода или вывода соответственно.

Во всех сообщениях параметр wParam передает ключ устройства, породившего событие. В сообщениях DATA /DONE параметр lParam передает указатель заголовка возвращаемого звукового буфера.

Сообщения звуковой подсистемы не требуют возврата значения обрабатывающей их функцией.

Уведомление вызовом программной функции

Звуковая подсистема вызывает заданную программную функцию, передавая в ее аргументах код и параметры события. Прототип вызываемой функции имеет следующий вид:

void CALLBACK CallbackProc (HWAVEx Handle, UINT Msg, DWORD Instance, DWORD Param1, DWORD Param2);

Handle - ключ звукового устройства. Имеет тип HWAVEIN или HWAVEOUT ; допустимо использование универсального типа HWAVE .

Msg - код события. Константы для кодов событий имеют те же имена, что и константы кодов сообщений для окон/задач, но без префикса MM_ (WIM_OPEN , WOM_DONE и т.п.). Фактически сейчас они определяются в MMSYSTEM.H как эквивалентные константам с префиксом MM_ , однако в будущем на это рассчитывать не стоит.

Instance - 32-разрядное информационное слово, указанное программой при открытии устройства. Звуковая подсистема никак не использует это значение, а лишь передает его при каждом вызове функции.

Param1 , Param2 - параметры события. Для событий OPEN и CLOSE значение Param1 равно нулю; для событий DATA и DONE этот параметр передает указатель заголовка возвращаемого звукового буфера. Значение Param2 в текущей реализации всегда равно нулю.

Функция может вызываться в контексте обработчика прерывания, поэтому безопасно может использовать лишь ограниченный набор функций Windows: EnterCriticalSection , LeaveCriticalSection , midiOutLongMsg , midiOutShortMsg , OutputDebugString , PostMessage , PostThreadMessage , SetEvent , timeGetSystemTime , timeGetTime , timeKillEvent , timeSetEvent . Обращение к другим системным функциям, как и к функциям звуковой подсистемы, может вызвать непредсказуемые последствия.

Для вызова функции звуковая подсистема создает отдельную задачу (thread) с повышенным (ABOVE_NORMAL) приоритетом. В отличие от передачи сообщений, которые обрабатываются в порядке очереди, вызов функции происходит параллельно с работой остальных задач процесса, поэтому необходимо позаботиться о синхронизации доступа функции и других задач к общим переменным и структурам данных.

Вспомогательная задача создается один раз и существует до полного завершения процесса. Звуковая подсистема вызывает из этой задачи функции уведомления для всех устройств, которые будут открыты за время жизни процесса.

Набор интерфейсных функций звуковых устройств

В дальнейшем мы будем придерживаться универсальной системы именования функций, указывая лишь смысловую часть имени и опуская префикс, содержащий тип и «ориентацию» устройства. Например, говоря о функции GetDevCaps, мы будем подразумевать две функции - waveInGetDevCaps и waveOutGetDevCaps , объясняя только их различия для устройств ввода и вывода. Это потребует от читателя «конструирования» полного имени функции в каждом конкретном случае, однако позволит сделать описание более широким и систематическим. В прототипе функции префикс будет обозначаться последовательностью «xxx ».

Первым параметром большинства функций указывается ключ (handle) открытого звукового устройства, имеющий тип HWAVEIN или HWAVEOUT ; в прототипе его тип обозначается HWAVEx . Как уже говорилось, ключи звуковых устройств можно хранить в переменных совместимого типа HWAVE .

Перечень интерфейсных функций

Запрос количества устройств

Запрос параметров и возможностей устройства

Открытие устройства

Закрытие устройства

Подготовка (фиксация в памяти) звукового буфера

Освобождение (снятие фиксации) звукового буфера

AddBuffer / Write

Передача очередного буфера драйверу устройства

Остановка записи/воспроизведения

Запуск записи/воспроизведения

Сброс потока

SetVolume / GetVolume

Установка/запрос громкости воспроизведения

SetPitch / GetPitch

Установка/запрос высоты тона при воспроизведении

SetPlaybackRate / GetPlaybackRate

Установка/запрос скорости воспроизведения

Запрос номера устройства по ключу

Запрос текста сообщения об ошибке по коду

Передача драйверу нестандартного сообщения

Значения, возвращаемые интерфейсными функциями

За редким исключением, все функции звукового интерфейса возвращают результат типа MMRESULT , эквивалентный типу UINT . Значение MMSYSERR_NOERROR , в текущей реализации равное нулю, означает успешное выполнение функции, любое другое значение указывает на ошибку. Константы для кодов ошибок имеют префиксы MMSYSERR_ (общая ошибка мультимедийной подсистемы) и WAVERR_ (ошибка драйвера Wave-устройства):

MMSYSERR_BADDEVICEID

Недопустимый номер устройства

MMSYSERR_NOTENABLED

Драйвер не активизирован

MMSYSERR_ALLOCATED

Устройство занято другим приложением

MMSYSERR_INVALHANDLE

Недопустимый ключ открытого устройства

MMSYSERR_NODRIVER

Драйвер отсутствует

Недостаточно памяти

MMSYSERR_NOTSUPPORTED

Запрошенная функция не поддерживается

MMSYSERR_BADERRNUM

Код ошибки вне допустимого диапазона

MMSYSERR_INVALFLAG

Недопустимый флаг

MMSYSERR_INVALPARAM

Недопустимый параметр

MMSYSERR_HANDLEBUSY

Над ключом выполняется операция от другой задачи

Неопределенная ошибка

MMSYSERR_NODRIVERCB

Драйвер не выполнил уведомления (callback)

WAVERR_BADFORMAT

Неверный или неподдерживаемый формат потока

WAVERR_STILLPLAYING

Идет запись или воспроизведение

WAVERR_UNPREPARED

Буфер не подготовлен

Устройство работает только в синхронном режиме

GetDevCaps - запрос параметров и возможностей устройств

MMRESULT xxxGetDevCaps (UINT DevId, LPWAVExCAPS Caps, UINT CapsSize);

Служит для определения параметров и возможностей устройства.

DevId - номер устройства начиная с нуля, либо ключ ранее открытого устройства, либо константа WAVE_MAPPER . В последнем случае возвращаются параметры стандартного системного устройства.

Caps - указатель структуры типа WAVEINCAPS или WAVEOUTCAPS (имеются специальные типы LPWAVEINCAPS и LPWAVEOUTCAPS ).

CapsSize - размер структуры в байтах.

При успешном завершении функция заполняет поля переданной указателем структуры параметрами устройства. Если были запрошены параметры Wave Mapper, то в качестве имени устройства возвращается название службы переназначения.

Open - открывание устройства

MMRESULT xxxOpen (LPHWAVEx ForHandle, UINT DevId, LPCWAVEFORMATEX Format, DWORD Callback, DWORD Instance, DWORD OpenFlags);

ForHandle - указатель переменной типа HWAVEIN или HWAVEOUT (тип указателя - LPHWAVEIN или LPHWAVEOUT ), в которую при успешном завершении операции записывается ключ открытого устройства.

DevId - номер устройства начиная с нуля, либо ключ ранее открытого устройства, либо значение WAVE_MAPPER . В последнем случае службой переназначения выбирается устройство, поддерживающее заданный формат, причем поиск начинается со стандартного системного устройства.

Format - указатель структуры типа WAVEFORMATEX, описывающей требуемый формат потока.

Callback - объект, которому будут передаваться уведомления драйвера о выполнении запрошенных операций. Задается ключом (handle) окна или события, указателем функции либо идентификатором задачи (thread id).

Instance - 32-разрядное информационное слово, которое будет передаваться драйвером в параметрах вызова функции уведомления. Например, при разработке универсального интерфейса со звуковыми устройствами это может быть указатель описателя устройства (структуры или объекта класса).

OpenFlags - флаги режимов открывания и работы устройства:

Драйвер не будет уведомлять программу о выполнении операций. Этот режим используется по умолчанию

Параметр Callback является ключом объекта события (event handle)

Параметр Callback является идентификатором задачи (thread id)

Параметр Callback является ключом окна (window handle)

CALLBACK_FUNCTION

Параметр Callback является указателем функции

WAVE_FORMAT_QUERY

Режим опроса формата. Драйвер только проверяет, может ли указанное устройство быть открыто с запрошенным форматом и в заданных режимах, и возвращает соответствующий код результата. В этом режиме параметр ForHandle может быть нулевым (NULL )

WAVE_FORMAT_DIRECT

Запрещает Wave Mapper и ACM принимать участие в преобразовании формата потока. Весь обмен данными производится только между драйвером и приложением

Разрешает открытие устройства в синхронном режиме. Для полностью синхронных устройств этот флаг должен быть указан обязательно

Разрешает Wave Mapper и ACM вмешиваться в обмен звуковыми данными между программой и драйвером устройства

В случае успешного открытия устройства (если не был задан флаг опроса формата) звуковая подсистема возвращает в переменную, на которую ссылается указатель ForHandle , ключ (handle) открытого устройства.

Устройства ввода открываются в режиме «стоп», и передача драйверу звуковых буферов не приводит к автоматическому запуску записи - для этого необходимо вызвать функцию Start. Устройства вывода открываются сразу в режиме воспроизведения, и при передаче драйверу первого же звукового буфера автоматически начинается его проигрывание.

При завершении работы с устройством его необходимо закрыть функцией Close, в противном случае открытое устройство может «зависнуть». В отличие от файловой, звуковая подсистема в Windows гораздо более чувствительна к ошибкам и не всегда в состоянии отследить завершение программы, чтобы аварийно закрыть звуковые устройства.

PrepareHeader - подготовка буфера и его заголовка к передаче драйверу

MMRESULT xxxPrepareHeader (HWAVEx Handle, LPWAVEHDR Hdr, UINT HSize);

Hdr

HSize

Подготавливает звуковой буфер к передаче драйверу. Обычно подготовка заключается в фиксации буфера в памяти, чтобы во время внепроцессорной передачи (DMA) он не оказался вытесненным (откачанным) на диск. В заголовке подготовленного буфера звуковой подсистемой устанавливается флаг WHDR_PREPARED .

Перед вызовом функции в заголовке буфера должны быть заполнены поля lpData , dwBufferLength , dwFlags .

Для уже подготовленного буфера функция не выполняет никаких действий и завершается успешно.

Write/AddBuffer - передача звукового буфера драйверу

MMRESULT waveOutWrite (HWAVEx Handle, LPWAVEHDR Hdr, UINT HSize); MMRESULT waveInAddBuffer (HWAVEx Handle, LPWAVEHDR Hdr, UINT HSize);

Hdr - указатель заголовка звукового буфера.

HSize - размер структуры заголовка.

Передает звуковой буфер драйверу для воспроизведения (Write ) или для записи (AddBuffer ). Буфер должен быть подготовлен функцией Prepare, иначе драйвер откажется его принять.

Получив буфер, драйвер сбрасывает в его заголовке флаг WHDR_DONE, включает заголовок во внутреннюю очередь и устанавливает флаг WHDR_INQUEUE. После этого асинхронный драйвер возвращает управление приложению, продолжая параллельную обработку очереди буферов по прерываниям от устройства; синхронный драйвер возвращает управление лишь после завершения обработки буфера.

Завершив обработку очередного буфера, драйвер изымает его из очереди, сбрасывает флаг WHDR_INQUEUE, затем устанавливает флаг WHDR_DONE, после чего выполняет уведомление приложения, если это было запрошено при открытии устройства. Затем драйвер продолжает обработку следующего буфера из очереди.

Приложение не имеет права изменять какие-либо поля заголовка до тех пор, пока обработка буфера драйвером не будет завершена.

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

Start/Restart - запуск записи/воспроизведения

MMRESULT waveInStart (HWAVEx Handle); MMRESULT waveOutRestart (HWAVEx Handle); Запускает запись/воспроизведение с текущей позиции потока.

При активном потоке функция не выполняет никаких действий и завершается успешно.

BreakLoop - прерывание текущего цикла

MMRESULT waveOutBreakLoop (HWAVEx Handle);

Сбрасывает режим цикла воспроизведения, если он установлен. Текущий проход цикла проигрывается до конца, далее воспроизведение продолжается линейно, без возврата к первому буферу цикла. Группа буферов цикла возвращается программе по мере завершения воспроизведения каждого из них.

При остановленном потоке или отсутствии цикла функция не выполняет никаких действий и завершается успешно.

SetVolume - установка громкости воспроизведения

MMRESULT waveOutSetVolume (HWAVEx Handle, DWORD Volume);

Volume - громкость по левому и правому каналу. Младшее слово задает громкость левого канала, старшее - правого. Значение 0xFFFF задает максимальную громкость, 0 - минимальную. Для адаптеров, не поддерживающих независимую регулировку громкости по каналам, младшее слово задает громкость в обоих каналах тракта.

Функция устанавливает выходной уровень воспроизводимого сигнала. Несмотря на то, что функцией допускается 65 536 уровней громкости, большинство адаптеров поддерживает лишь от 8 до 256 уровней. В таких случаях значимыми являются только от трех до восьми старших разрядов значения громкости, младшие разряды игнорируются. Такая трактовка позволяет использовать одну и ту же шкалу громкости, изменяя лишь степень ступенчатости регулировки.

Функция поддерживается только адаптерами, в свойствах которых установлен флаг WAVECAPS_VOLUME. Раздельная регулировка по каналам поддерживается только при наличии флага WAVECAPC_LRVOLUME.

SetPitch / SetPlaybackRate - установка высоты тона / скорости воспроизведения

MMRESULT waveOutSetPitch (HWAVEx Handle, DWORD Multiplier); MMRESULT waveOutSetPlaybackRate (HWAVEx Handle, DWORD Multiplier); Multiplier - множитель высоты тона / скорости воспроизведения. Старшее слово задает целую часть множителя, младшее - дробную. Если имеется значение множителя f типа double , то преобразовать его в тип DWORD можно по формуле:

Multiplier = (DWORD)(f * 0x10000)

Функции изменяют высоту тона или скорость воспроизведения потока, не изменяя частоты дискретизации, на которой воспроизводится поток. Значение множителя должно быть положительным. По умолчанию установлен множитель 1.0, что означает воспроизведение потока с естественной высотой и скоростью.

При изменении высоты тона все звуки в потоке становятся выше или ниже, однако длительность каждого звука и общее время воспроизведения сохраняются. Изменение скорости воспроизведения подобно изменению скорости ленты в магнитофоне: все звуки становятся выше или ниже, а общее время воспроизведения соответственно уменьшается или увеличивается.

Эту пару функций поддерживают далеко не все звуковые адаптеры; как правило, она реализуется на специализированных сигнальных процессорах (DSP). Технически проще всего реализуется изменение скорости, для чего в точках между имеющимися отсчетами путем интерполяции вычисляются промежуточные отсчеты, следующие друг за другом чаще или реже, которые и поступают на схему ЦАП. Изменение высоты требует гораздо более сложных вычислений: фрагменты потока разлагаются в ряд Фурье, образуя спектр звука, затем спектр сдвигается в сторону высоких или низких частот, после чего из измененного спектра снова формируется фрагмент нового звукового потока.

Для адаптеров, поддерживающих изменение высоты и/или скорости, функция GetDevCaps устанавливает флаги WAVECAPS_PITCH и WAVECAPS_PLAYBACKRATE соответственно.

GetID - запрос номера устройства по ключу

MMRESULT xxxGetID (HWAVEx Handle, LPUINT ForID);

ForID - указатель переменной типа UINT , в которую заносится номер устройства.

Функция определяет номер устройства, при открытии которого системой был возвращен заданный ключ. В том случае, если при открывании была использована служба переназначения (значение WAVE_MAPPER вместо номера или флаг WAVE_MAPPED), функция возвращает значение WAVE_MAPPER .

Документация Microsoft утверждает, будто эта функция поддерживается только для совместимости, и что для получения номера достаточно привести ключ к нужному типу, однако это совсем не так. Ключ открытого устройства является адресом описателя, принадлежащего звуковой подсистеме, и в Win32 размещается в общей области памяти. Единственный способ получить номер устройства по ключу - использование функции GetID .

GetErrorText - запрос текстового сообщения об ошибке по коду

MMRESULT xxxGetErrorText (MMRESULT Error, LPSTR Text, UINT TextSize);

Error - код ошибки, возвращенный одной из интерфейсных функций;

Text - указатель текстового буфера (массива типа char );

TextSize - размер текстового буфера в байтах.

Функция заносит в заданный буфер текстовое описание ошибки с заданным кодом. Записанный текст завершается нулевым байтом. Если буфер недостаточно велик, то конец текста обрезается; нулевой байт записывается в буфер в любом случае. Размер буфера, способного вместить любое сообщение об ошибке, определяется константой MAXERRORLENGTH .

Сообщения об ошибках не имеют разделения по типам устройств, поэтому для запроса текста любой ошибки достаточно любой из возможных функций, например waveOutGetErrorText .

Message - передача сообщения драйверу

MMRESULT xxxMessage (HWAVEx Handle, UINT Msg, DWORD P1, DWORD P2);

Msg - код передаваемого сообщения.

P1 , P2 - параметры сообщения.

Функция используется для прямой передачи сообщения драйверу. Все интерфейсные функции, кроме GetID и GetErrorText, транслируются звуковой подсистемой в сообщения, передаваемые драйверу; при этом каждое сообщение имеет два параметра типа DWORD , в которые преобразуются параметры интерфейсных функций. Если драйвер устройства поддерживает нестандартные сообщения, они могут быть переданы ему при помощи функций Message . Возвращаемое значение при этом определяется самим драйвером.

Недостатки звуковой подсистемы MME

В Windows 95/98 подсистема MME и ее драйверы так и остались 16-разрядными, как и в Windows 3.x. Из-за этого каждое обращение к звуковому драйверу из Win32–приложения сопровождается двойной сменой режима исполнения (thunking), что, увы, приводит к дополнительным накладным расходам, доходящим до единиц миллисекунд на процессорах Celeron-366. Кроме того, многие драйверы ограничивают частоту обновления кольцевого буфера, через который идет обмен между компьютером и адаптером, до нескольких десятков раз в секунду, отчего в процессе передачи звука возникает отставание (latency). У драйверов для адаптеров ISA это отставание может достигать десятков миллисекунд, у драйверов для адаптеров PCI оно обычно ограничивается единицами миллисекунд.

Для более оперативного вывода звука, особенно с модификацией его в реальном времени, Microsoft разработан более новый интерфейс - DirectSound . Этот интерфейс призван «приблизить» аппаратуру адаптера к прикладной программе и позволяет ей практически напрямую записывать звук в системный кольцевой буфер, сводя максимальные задержки к единицам миллисекунд для любого адаптера. При работе с DirectSound программа обращается непосредственно к 32-разрядному системному драйверу адаптера (VxD), минуя переключения между 32- и 16-разрядным режимом исполнения.

В целях эффективной работы интерфейс DirectSound должен поддерживаться системным драйвером адаптера. Для устройств, драйверы которых не поддерживают DirectSound , Windows эмулирует новый интерфейс «поверх» обычного MME–драйвера, но в этом случае все задержки даже возрастают из-за накладных расходов на эмуляцию.

К сожалению, Microsoft разработала спецификацию расширения DirectSound для звуковых VxD только в части воспроизведения звука, действуя прежде всего в интересах производителей игр. Запись звука через DirectSound до сих пор ведется путем эмуляции поверх MME.

Надо сказать, что звуковая подсистема Windows 3.x и 95/98, равно как и подсистема удаленного доступа к сети (RAS), обладает низкой устойчивостью к ошибкам. Это чаще всего проявляется в том, что при аварийном завершении программы, открывшей звуковые устройства и работающей с ними, система не выполняет корректного закрытия (cleanup) используемых устройств. В результате этого в ряде случаев после такого аварийного завершения может потребоваться перезагрузка, а до тех пор незакрытые устройства будут недоступны другим приложениям. Кроме того, 16-разрядные подсистемы защищены от ошибок гораздо меньше 32-разрядных, так что серьезные ошибки в звуковых программах могут приводить к сбоям и «зависаниям» всей системы Windows.

В Windows NT все подсистемы сделаны изначально 32-разрядными, поэтому описанных проблем там не возникает, однако задержки ввода и вывода звука по-прежнему определяются частотой обновления кольцевого буфера, которая задается драйвером конкретного адаптера.

Пример программы, использующей интерфейс MME

В качестве иллюстрации приводится программа, реализующая в реальном времени эффект задержки (delay). Суть эффекта состоит в сложении исходного звукового сигнала с его копией, задержанной во времени на небольшую величину (единицы-сотни миллисекунд). Задержка на величину до 15-20 мс воспринимается на слух, как «дробление» источника звука; на этом принципе основано создание хорового эффекта. Задержка на величину 20-50 мс воспринимается как реверберация (ощущение объема), а большие величины задержки - как обычное эхо.

Чтобы получить правдоподобное звучание описанных эффектов, обычно делается несколько последовательных задержек звука, в которых копия исходного сигнала постепенно ослабляется. В приведенной программе для простоты делается только одна задержка, причем копия сигнала не ослабляется.

Программа реализована на языке C++. Фактически от C++ в ней использованы лишь общие расширения (определение переменных в заголовках циклов, использование имен структур в качестве имен типов и т.п.), в остальном же можно считать, что в ней использовался обычный язык ANSI C.

Разработка программы выполнялась в среде MS VC++ 4.2. Использован только стандартный интерфейс Windows, без каких-либо расширений из среды разработки.

Программа работает в реальном времени, одновременно открывая два звуковых устройства - ввода и вывода. Поступающие с устройства ввода заполненные звуковые буферы суммируются со своими сдвинутыми во времени копиями, после чего отправляются устройству вывода; между устройством ввода и вывода циркулирует один общий набор звуковых буферов.

Для управления циркуляцией буферов создается отдельная рабочая задача (worker thread), которой присваивается максимальное приращение приоритета. Звуковые устройства открываются в режиме уведомления рабочей задачи.

Вследствие буферизации выводимый программой звук несколько отстает от исходного. Общее время буферизации и количество звуковых буферов задается в секции параметров программы. Для непрерывного переноса звука количество буферов не должно быть меньше двух; приемлемая стабильность достигается уже при использовании трех-четырех буферов.

Для работы программы необходим полнодуплексный звуковой адаптер, допускающий одновременную работу своего АЦП и ЦАП. Большинство современных адаптеров удовлетворяет этому условию.

Пример

КомпьютерПресс 6"2000

Изменить > Установки > Аудиооборудование (Edit > Preferences > Audio Hardware). Закладка: Аудиооборудование / Audio Hardware предназначена для управления аппаратными звуковыми устройствами. Когда подключается аудиооборудование, в этом диалоговом окне загружаются настройки оборудования для данного типа устройства, такие как вход по умолчанию, выход по умолчанию, основной тактовый генератор, задержка и частота дискретизации.
Класс устройства (Device Class) : выбираем драйвер для звуковой платы, которую планируем использовать. В Windows ASIO драйвера поддерживающиеся профессиональными картами и MME драйвера обычно поддерживающиеся стандартными картами. В Mac OS CoreAudio драйвера поддерживающиеся как профессиональными, так и стандартными картами.
Предпочтительно использовать драйверы ASIO и CoreAudio, так как они обеспечивают более высокую эффективность и меньшую задержку. Можно также вести мониторинг аудио в процессе записи и мгновенно отслеживать громкость, панорамирование и изменение эффектов во время воспроизведения.
*Эта опция важна, так как если мы используем обычный звуковой кодек, и если в данном пункте будет выбран ASIO драйвер, вместо MME. То на таймлайне при нажатии кнопки воспроизведения, не запустится плейбек.
Ввод по умолчанию (Default Input) : Нет входного сигнала (No Input).
*Если у вас воспроизведение на таймлайне идет с повышенной скоростью (или воспроизведение и движение плейхэда происходит скачками, заикается звук и т.д.), а также появляется ошибка: Audio hardware I/O overloaded at 00:00:00:001 in "Adobe Player".

Или получаем сообщение: Внутренняя ошибка устройства MME. Открыть настройки аудиооборудования?
То при выставленном Класс устройства: MME (а не ASIO), выбираем из выпадающего списка, Вход по умолчанию: Нет входного сигнала (Default Input: No Input), вместо Цифровое аудио (S/PDIF) (Sound Blaster X-Fi Xtreme Audio), или Microphone (Realtek High Definition Audio) (Not working) / Микрофон (Realtek High Definition Audio) (Не работает), или FrontMic (Realtek High Definition Audio) (Not working).


Вывод по умолчанию (Default Output) :

Основной тактовый генератор (Master Clock) . Для параметра «Основной тактовый генератор» выберите вход или выход, с которым требуется синхронизировать другое цифровое аудиооборудование (для точного сопоставления сэмплов).
Задержка (Latency) . Для параметров «Размер буфера ввода-вывода» (ASIO и CoreAudio) или «Задержка» (MME) укажите минимально возможное значение, при котором не возникает пропусков аудио. Идеальное значение зависит от быстродействия системы, поэтому его необходимо найти экспериментальным путем.

Выбираем частоту дискретизации для аудиооборудования.
*Если у вас выставлена частота отличная от 48кГц, или при выборе Ввод по умолчанию: Микрофон (Realtek High Definition Audio), будут два значения: ввод 44100Гц/вывод 96000Гц то могут быть проблемы с вопроизведением на таймлайне программы Adobe Premiere Pro CC 2015.
Нажимаем на кнопку: Настройки... (Settings) . Появится окно: Звук с закладкой - Воспроизведение. Здесь можно выбрать устройство воспроизведения, параметры которого нужно изменить.

Закладка: Запись.

Закладка: Звуки. Звуковая схема задает звуки, сопровождающие события в операционной системе Windows и программах. Можно выбрать одну из существующих схем или создать новую.

Закладка: Связь. Windows может уменьшить громкость различных звуков при использовании компьютера для разговора по телефону.

Отображение выхода (Output Mapping) - здесь можно указать целевой динамик в аудиосистеме компьютера для каждого поддерживаемого аудиоканала.


*Установки для устройств CoreAudio с малой задержкой, поддерживают следующие режимы: только вход, только выход или полный дуплекс / Master Clock. Можно изменить такие свойства, как основной тактовый генератор / Clock Source (MOTU, SPDIF и ADAT) и размер буфера ввода-вывода / I/O Buffer Size (малая задержка, 32 сэмпла).
*В этом выпуске Adobe Premiere Pro встроено высокоэффективное ядро работы со звуком из Adobe Audition, которое обеспечивает более удобное и функциональное редактирование звука. Также реализованы и другие новые функции: более быстрая настройка записи закадрового голоса, улучшенный экспорт многоканального аудио и более интуитивный пользовательский интерфейс для маршрутизации аудио. Новый интерфейс маршрутизации аудио позволяет лучше контролировать процесс визуального назначения каналов вывода для стандартных, монофонических, адаптивных дорожек и дорожек 5.1. В рабочем процессе «Изменить клип» реализована матрица для сопоставления доступных аудиоканалов в исходном файле с каналами и объектами дорожки в клипе. Кроме того, теперь Premiere Pro поддерживает широкий ряд звукового оборудования в режиме Plug-and-play, в том числе ASIO и MME (Windows) и CoreAudio (Mac), и имеет заранее загруженные конфигурации для устройств такого типа.