|
|
|
Не понятно как шагать...
|
|||
|---|---|---|---|
|
#18+
Есть такое описание в MSDN, что если вы конвертите WAV с одного формата в другой, например PCM в ALAW, то с помощью функций acm* придется конвертить в несколько шагов. Сначала PCM в требуемый формат, потом то что получилось в ALAW. Хорошо пробую. Первый шаг проходит на ура (кроме 4-х канальных и 4-х битных форматов). Ладно, но дальше дело не идет!!! В чем может быть дело? Подбираю формат следующим образом: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. Все вываливается на -28-й ошибке. Единственное, что получилось сделать, это сконвертнуть на ADPCM 1-channels 11250 4bits. Подскажите, пожалуйста, в чем может быть дело? И вопрос в догонку. Может, кто-нибудь, может подсказать, какие форматы, изначально не корректны. Например, складывается впечатление, что PCM не бывает 4-х канальным и 4-х битным. Заранее благодарен. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.04.2006, 10:39 |
|
||
|
Не понятно как шагать...
|
|||
|---|---|---|---|
|
#18+
В начале преведенного сырца, есстественно, пропущена строчка (забыл скопировать): Код: plaintext ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.04.2006, 10:48 |
|
||
|
Не понятно как шагать...
|
|||
|---|---|---|---|
|
#18+
Есть некоторые мысли Есть намеки (например на acmFormatTagDetails для проверки) Некоторые стандартные кодеки могут только декодировать... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.04.2006, 12:07 |
|
||
|
Не понятно как шагать...
|
|||
|---|---|---|---|
|
#18+
Maksim UM Есть некоторые мысли Есть намеки (например на acmFormatTagDetails для проверки) Некоторые стандартные кодеки могут только декодировать... Начал копать в подборе требуемых драйверов. На это натолкнула мысль, что acmFormatChoose дает на выбор только несколько драйверов. Возможно acmFormatSuggest тоже пытается выбрать по какому-то маленькому списку. 1. Первая ссылка утвердила меня в том, что надо выдавать в Suggest нужный драйвер, а не выбирать автоматический поиск драйвера - NULL 2. Вторую ссылку я уже обчитался. 3. Учту. Спасибо, за советы. Может у кого-нибудь есть ссылки или примеры по выбору подходящего драйвера? Я пробую через acmDriverDetails. Сейчас пытаюсь решить следующие вопросы: 1. Как определить форматы, поддерживаемые драйвером? 2. Как определить в какие форматы он умеет кодировать, а в какие декодировать? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.04.2006, 13:19 |
|
||
|
Не понятно как шагать...
|
|||
|---|---|---|---|
|
#18+
в мсдне (вторая ссылка) описана куча enum'ов, например acmFormatEnum. С помощью них можно определить что поддерживается. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.04.2006, 13:51 |
|
||
|
Не понятно как шагать...
|
|||
|---|---|---|---|
|
#18+
Maksim UMв мсдне (вторая ссылка) описана куча enum'ов, например acmFormatEnum. С помощью них можно определить что поддерживается. Похоже я был не прав. Я начал копать с acmDriverEnum, а надо было с acmFormatEnum. :( Насколько я понял, только так можно получить нужный драйвер, т.к. details драйвера такой информации не предоствляет. Да и второй способ рациональней ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.04.2006, 14:18 |
|
||
|
Не понятно как шагать...
|
|||
|---|---|---|---|
|
#18+
Почему вылетает access violetion? Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.04.2006, 17:20 |
|
||
|
Не понятно как шагать...
|
|||
|---|---|---|---|
|
#18+
Да, кстати, ошибка вылетает после того, как один раз Callback обработался. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.04.2006, 17:25 |
|
||
|
Не понятно как шагать...
|
|||
|---|---|---|---|
|
#18+
дк... потому, что access того, violetion... так не скажешь. нужно код видеть. а проще в отладчике поглядеть ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.04.2006, 18:07 |
|
||
|
Не понятно как шагать...
|
|||
|---|---|---|---|
|
#18+
Maksim UMдк... потому, что access того, violetion... так не скажешь. нужно код видеть. а проще в отладчике поглядеть В отладчике выхожу из коллбака, иду дальше по машиннному коду, долго долго иду и кирдык. Если по машинному коду не идти, то большо на текст программы отладчик не возвращает. 1. Какие куски кода показать? (весь код уже содержит много функций, и состоит из библиотеки на VC++ и клиенте на Delphi) 2. Балуюсь с последним параметром acmFormatEnum() - флаги, по которым подбирать форматы, так результаты самые не понятные. То он мне только PCM предлогает, то 1 (!) только какой-то формат 85, то, вообще, программа вылетает без всякик access'ов. Приведу некоторые части кода, которые мне кажутся интересными: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. Да в принципе и все. Не знаю, что будет еще нужно показать. Справшивайте. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.04.2006, 18:25 |
|
||
|
Не понятно как шагать...
|
|||
|---|---|---|---|
|
#18+
Коллбак объявлен как: Код: plaintext 1. Это правельно? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.04.2006, 11:34 |
|
||
|
Не понятно как шагать...
|
|||
|---|---|---|---|
|
#18+
а не так случайно? Код: plaintext 1. Надо поставить вывод в лог файл контрольные точки в колбэке (после каждой строки кода). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.04.2006, 11:45 |
|
||
|
Не понятно как шагать...
|
|||
|---|---|---|---|
|
#18+
Maksim UMа не так случайно? Код: plaintext 1. Надо поставить вывод в лог файл контрольные точки в колбэке (после каждой строки кода). 1. Дело в том, что так оно не компилится: Код: plaintext 1. 2. 3. Врядли, дело в с. 2. А что это дает? Я смотрел в дебаггере. Каллбак дебагится на ура. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.04.2006, 12:23 |
|
||
|
Не понятно как шагать...
|
|||
|---|---|---|---|
|
#18+
Я никак не врублюсь, что надо указывать в Details, Format и последнем параметре acmFormatEnum (флаги ограничения области перебора), чтобы выдать запрос на перебор всех форматов, в которые можно сконвертить из данного. Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. Структуры: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.04.2006, 12:31 |
|
||
|
Не понятно как шагать...
|
|||
|---|---|---|---|
|
#18+
Тяжело так сходу сказать, но во первых, вот еще одна хорошая ссылка , а во-вторых, чему равно CONVERT_EXT_BUFFER? дополнительный довесок может быть разный. С помощью acmMetrics и acmFormatTagDetails можно уточнять размер. можно попробовать увеличить CONVERT_EXT_BUFFER. И все-таки, второй раз колбэк получает управление, если да то в каком месте ошибка? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.04.2006, 16:46 |
|
||
|
Не понятно как шагать...
|
|||
|---|---|---|---|
|
#18+
Maksim UMТяжело так сходу сказать, но во первых, вот еще одна хорошая ссылка , а во-вторых, чему равно CONVERT_EXT_BUFFER? дополнительный довесок может быть разный. С помощью acmMetrics и acmFormatTagDetails можно уточнять размер. можно попробовать увеличить CONVERT_EXT_BUFFER. И все-таки, второй раз колбэк получает управление, если да то в каком месте ошибка? За ссылку спасибо. Но она уже дня 3 как стала моей библией. :) На счет CONVERT_EXT_BUFFER и всего, что с ним связано (BYTE Ext[CONVERT_EXT_BUFFER]). Эта константа равна 1024. Я так понимаю, что чем больше тем, лучше. В msdn'е указаны разные размеры для разных кодеков, но обычно 30-50 байт. В одном примере видел, что выбирают 128 байт, так что я думаю, что 1024 - это будет хорошо. С вылетанием разобрался. Дело было в этих довесках (CONVERT_EXT_BUFFER), я осознанно поступал не корректно, объявляя довески сразу после структур. Не хотелось акцинтировать на этом внимание. В итоге, оказалось, что acm* -функции начинают вываливать добавочную информацию в стек, убивая там что не попадя. Вообщем переделал это дело под С++: Код: plaintext 1. 2. 3. В итоге, я сейчас остановился на следующем: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. В результате каллбак мне вываливает идентификаторы драйвера с форматоми этого типа. Так складывается, что если задовать PCM, то вываливается драйвер, который может конвертить внутри типа PCM, если указать другой тип, то вываливается драйвер, который может конвертить только между типами. Причем по одному для ALAW, MULAU, ADPCM (интересно, почему). Вообщем, думаю действовать так: Допустим задан файл PCM 1. Конверчу его чем попало в похожий формат на требуемый. 2. Находу драйвер, который мне выволит acmFormatEnumCallBack и попытаюсь им конвертнуть в тип формата, который мне нужен. Других путей я не вижу. Будет ли это лучше, чем acmFormatSuggest()? И возникает подводный камень, который, надеюсь пройдет на ура. PCM в 4-х битах не существует, а ADPM, как я понял, только в 4-х битах и бывает. Остается надеятся, что ADPM-й драйвер свправиться с этой задачей ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.04.2006, 17:07 |
|
||
|
Не понятно как шагать...
|
|||
|---|---|---|---|
|
#18+
Блин, все равно не хочет... Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. Код: plaintext 1. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.04.2006, 17:44 |
|
||
|
|

start [/forum/topic.php?fid=57&msg=33694402&tid=2031375]: |
0ms |
get settings: |
6ms |
get forum list: |
15ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
56ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
53ms |
get tp. blocked users: |
1ms |
| others: | 216ms |
| total: | 364ms |

| 0 / 0 |
