Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Media";
Текущий архив: 2006.03.26;
Скачать: [xml.tar.bz2];

Вниз

Несколько звуковых карт, как выбрать из них любую?   Найти похожие ветки 

 
Argon   (2005-10-04 21:20) [0]

Здравствуйте, такая задача, компонент Медиаплейер выводит звук на карту по умолчанию, можно ли и как, заставить его выводить звук на любую(по желанию пользователя) из приложения?


 
Jeer ©   (2005-10-05 10:26) [1]

waveOutGetNumDevs
waveOutGetDevCaps


 
Argon   (2005-10-05 16:34) [2]

Jeer я правильно понимаю, что после этих волшебных действий стандартный компонент Медиаплейер вдруг(?) заиграет на той карте которую выберет пользователь?


 
Jeer ©   (2005-10-05 16:56) [3]

*getnum* - получает число устройств.
*getdev* перечисляет устройства.
GetWaveOutDevices - устанавливает устройство


 
Digitman ©   (2005-10-07 15:44) [4]


> Argon   (04.10.05 21:20)  


> Медиаплейер выводит звук на карту по умолчанию


здесь ты не совсем точен.

Медиаплейер (или иная приблуда, использующая MSMMAPI) использует не звуковую карту по умолчани, а MM-дивайс (соответствующего назначения) по умолчанию.

MM-дивайс же физически не обязан быть картой , это может быть и виртуальный MM-дивайс,  который, к примеру, просто записывает воспроизводимые на нем данные в файл или кидает их по сети в какую-нть тмутаракань)


 
Argon   (2005-10-14 12:06) [5]

Спасибо всем, очень содержательные ответы...  из них следует, что никто из ответивших толком и не знает как на самом деле заставить стандартный компонент Delphi вывести звук на любую карту...


 
Eraser ©   (2005-10-14 13:24) [6]


> Argon   (14.10.05 12:06) [5]

Уже 3 раза ответели! Ответы сконкатенируй!
Подсказка: TMediaPlayer.DeviceID + [1].


 
Argon   (2005-10-14 14:06) [7]

Eraser из трех ответов все бестолковые и четвертый такой же, сами-то пробовали то что написали?


 
Digitman ©   (2005-10-14 15:38) [8]


> Argon   (14.10.05 14:06) [7]


пальцы гни в другом месте.

то что Eraser ©   (14.10.05 13:24) [6] не учел read-only-атрибута св-ва TMediaPlayer.DeviceID, ни о чем не говорит.

Подсказку тебе дали : прежде чем вызывать TMediaPlayer.Open установи нужный waveOut-дивайс в системе по умолчанию.

ЧТО еще не понятно ?

как выбирать и устанавливать дивайс, Jeer тебе уже сказал.

Вперед ! С песней и пляской ! Штудировать Microsoft Multimedia API Reference !

За доп.подробностями -  в msdn.microsoft.com


 
Argon   (2005-10-14 16:36) [9]

Digitman чего завелся-то?!  И кто тут пальцы гнет большой вопрос..., отвечающие сквозь зубы цедят по каплям, по нормальному разговаривать не хотят или не умеют, то, что предложил Jeer вообще не решение(учитывая что функции GetWaveOutDevices нет в природе), с таким же успехом можно посоветовать сделать нужную карту, картой по умолчанию и всех делов-то... Чего психовать-то? Я за язык никого не тянул, по моим понятиям знаешь ответ - скажи,  а нет промолчи...

p.s. Ну и скажите мне вот так по честному, вот в своем приложении, вы будете перед вызовом TMediaPlayer.Open устанавливать нужный waveOut-дивайс в системе по умолчанию? Типа как программист будете довольны своей работой?

p.p.s. Я пальцы гну... ;-) насмешили, пока я вижу упорное не желание признать, что все ответы таковыми в сущности не являются, в принципе я склоняюсь к мысли, что ответ(в рамках поставленного вопроса) наверное отрицательный.


 
Eraser ©   (2005-10-14 18:12) [10]


> Argon   (14.10.05 16:36) [9]

1. VCL вроде как с исходниками идёт, и TMediaPlayer с его методом Open не исключение. Я сам не пользовлся св-м TMediaPlayer.DeviceID вот и сделал ошибку, вернее не точность, но это уже твои проблемы.
2. Вот за тебя нашёл нужную MCI команду MCI_SETAUDIO.


 
Eraser ©   (2005-10-14 18:21) [11]


> Argon

Так же смотри ф-ю mciSendString, с пом. неё сожно устанавливать нужное устройство.


 
Argon   (2005-10-14 18:56) [12]


> Eraser ©   (14.10.05 18:12) [10]


 Да, чего такие нервные все? Чего это ради моя проблема, что вы даете абсолютно не рабочие советы(по поводу  TMediaPlayer.DeviceID + [1].)
?! Это ваша проблема и только ваша... не надо с больной головы на здоровую перекладывать...

 Ну и давайте закончим, а то это уже все дальше и дальше от сути уходит...

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

p.s. А по вашей логике VCL вроде как с исходниками идёт, и MediaPlayer с его методом  Open не исключение так и вопросов  в этом случае не должно быть ни у кого и никогда...

Еще раз всем спасибо, и извините если кого обидел...


 
Eraser ©   (2005-10-14 19:11) [13]


> Argon   (14.10.05 18:56) [12]
Это ваша проблема и только ваша... не надо с больной головы на здоровую перекладывать...

Да ладно!

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

Это готовый код что ли?

ЗЫ Читай MSDN, особенно про параметры ф-ии mciSendString.

Device Control
To control an MCI device, you open the device, send the necessary commands to it, and then close the device. The commands can be very similar, even for completely different MCI devices. For example, the following series of MCI commands plays the sixth track of an audio CD by using the mciSendString function:

mciSendString("open cdaudio", lpszReturnString,
   lstrlen(lpszReturnString), NULL);
mciSendString("set cdaudio time format tmsf", lpszReturnString,
   lstrlen(lpszReturnString), NULL);
mciSendString("play cdaudio from 6 to 7", lpszReturnString,
   lstrlen(lpszReturnString), NULL);
mciSendString("close cdaudio", lpszReturnString,
   lstrlen(lpszReturnString), NULL);


The next example shows a similar series of MCI commands that plays the first 10,000 samples of a waveform-audio file:

mciSendString(
   "open c:\mmdata\purplefi.wav type waveaudio alias finch",
   lpszReturnString, lstrlen(lpszReturnString), NULL);
mciSendString("set finch time format samples", lpszReturnString,
   lstrlen(lpszReturnString), NULL);
mciSendString("play finch from 1 to 10000", lpszReturnString,
   lstrlen(lpszReturnString), NULL);
mciSendString("close finch", lpszReturnString,
   lstrlen(lpszReturnString), NULL);
These examples illustrate some interesting facts about MCI commands:


The same basic commands (open, set, play, and close) are used with CD audio and waveform-audio devices. The same MCI commands are used with all MCI devices.
The open command for the waveform-audio device includes a filename specification. The waveform-audio device is a compound device (one associated with a data file), while the CD audio device is a simple device (one without an associated data file).
The set command specifies time formats in each case, but the time-format flag for the CD audio device specifies tracks/minutes/seconds/frames (TMSF) format, while the time format used with the waveform-audio device specifies "samples".
The variables used with the "from" and "to" flags are appropriate to the respective time format. For example, for the CD audio device, the variables specify a range of tracks, but for the waveform-audio device, the variables specify a range of samples.


 
Argon   (2005-10-14 19:32) [14]


> Eraser ©   (14.10.05 19:11) [13]


 Да в принципе и так все уже давно понятно, проще написать свою процедуру как выбора карты так и вывода звука на нее(c MCI или без него уже другой вопрос)...

Спасибо...

p.s. Знать как делать и уметь это делать, вообще-то большая разница, тех которые знают, почему то значительно больше...ни к кому ничего личного...


 
Jeer ©   (2005-10-17 10:48) [15]

Argon   (14.10.05 16:36) [9]

>то, что предложил Jeer вообще не решение

Да, извини - предполагался код функции GetWaveOutDevices с использованием
WaveOutOpen(..) - упустил и не заметил.

В совокупности же:
waveOutGetNumDevs
waveOutGetDevCaps
waveOutOpen

-  это и есть одно из решений.

Логика алгоритма проста:
- waveOutGetNumDevs определяет число devices;
- waveOutGetDevCaps перечисляет devices по именам, а программист дает возможность пользователю выбрать нужное устройство;
- waveOutOpen c параметром UINT uDeviceID открывает устройство по его индексу.

Ну и чего ты тут раздухарился ?
Ведь все очевидно и все понятно:)

Вероятно тебя разозлило, что ты не смог методами Copy/Paste вставить приведенные рекомендации и чтобы все заработало само собой ?

Это твои проблемы.
Но по крайней мере, ты уже понял что "без труда.." - это и есть главный результат этой ветки.
Для тебя.


 
Argon   (2005-10-17 21:36) [16]


> Jeer ©   (17.10.05 10:48) [15]


Трудный ты...  ломает меня  копья ломать... смысла нет. Есть задачи и поважнее.

p.s. Все отвечающие крутые, все спрашивающие лохи... может это тебя успокоит?


 
Jeer ©   (2005-10-18 11:58) [17]

Argon   (17.10.05 21:36) [16]

Мне это фиолетово, как ко мне..
А трудиться тебе:)



Страницы: 1 вся ветка

Форум: "Media";
Текущий архив: 2006.03.26;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.5 MB
Время: 0.053 c
15-1141363177
MBo
2006-03-03 08:19
2006.03.26
Пятничные задачки, в основном простенькие


2-1142067307
dabreezy
2006-03-11 11:55
2006.03.26
Как правильно запускать несколько потоков?


2-1141997749
Mozgan
2006-03-10 16:35
2006.03.26
Атрибут файла


2-1141751190
Эля
2006-03-07 20:06
2006.03.26
минимизация многооконного приложения


2-1141644031
Farpik
2006-03-06 14:20
2006.03.26
Как отследить подключение к Интернету?





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский