Имя аудио устройства

Тема в разделе "WASM.AUDIO", создана пользователем _qwe8013, 12 июл 2017.

  1. Mikl___

    Mikl___ Супермодератор Команда форума

    Публикаций:
    14
    Регистрация:
    25 июн 2008
    Сообщения:
    3.709
    если строки уже готовы, то нужно сохранить их в формате cp866 или использовать функцию CharToOem
     
  2. _qwe8013

    _qwe8013 Active Member

    Публикаций:
    2
    Регистрация:
    30 ноя 2016
    Сообщения:
    123
    Я в #18 написал, что CharToOEM почему-то не помогает.
     
  3. Mikl___

    Mikl___ Супермодератор Команда форума

    Публикаций:
    14
    Регистрация:
    25 июн 2008
    Сообщения:
    3.709
  4. Thetrik

    Thetrik UA6527P

    Публикаций:
    0
    Регистрация:
    25 июл 2011
    Сообщения:
    861
  5. Mikl___

    Mikl___ Супермодератор Команда форума

    Публикаций:
    14
    Регистрация:
    25 июн 2008
    Сообщения:
    3.709
    _qwe8013,
    вчерашний день убил, чтобы вывести юникод-строку с кириллицей из консольного приложения на экран. SetConsoleCP и SetConsoleOutputCP, WideCharToMultiByte и MultiByteToWideChar не помогли. IMHO ― проще всего использовать в консоли MessageBoxW :) дешево и сердито!
    Код (ASM):
    1. .code
    2. lea rdx,MsgBoxText
    3.     invoke MessageBoxW,NULL,,0,MB_OK
    4. .data
    5. MsgBoxText      dw 423h,43Ah,430h,437h,0
    00.png
     
  6. Mikl___

    Mikl___ Супермодератор Команда форума

    Публикаций:
    14
    Регистрация:
    25 июн 2008
    Сообщения:
    3.709
    Спасибо за помощь с форума masm32. :drinks: Вывод юникода в консоль выглядит вот так
    Код (ASM):
    1. include win64a.inc
    2. includelib msvcrt.lib
    3. include msvcrt.inc
    4. BLACK equ 0
    5. BLUE equ 1
    6. GREEN equ 2
    7. CYAN equ 3
    8. RED equ 4
    9. PURPLE equ 5
    10. YELLOW equ 6
    11. SYSTEM equ 7
    12. GREY equ 8
    13. BRIGHTBLUE equ 9
    14. BRIGHTGREEN equ 10
    15. BRIGHTCYAN equ 11
    16. BRIGHTRED equ 12
    17. BRIGHTPURPLE equ 13
    18. BRIGHTYELLOW equ 14
    19. WHITE equ 15
    20. MAXSCREENX = 80
    21. MAXSCREENY = 25
    22. buffersize = 200
    23. SMALL_RECT STRUCT
    24.    Left      WORD      ?
    25.    Top       WORD      ?
    26.    Right     WORD      ?
    27.    Bottom    WORD      ?
    28. SMALL_RECT ENDS
    29. COORD STRUCT
    30. X  WORD ?
    31. Y  WORD ?
    32. COORD ends
    33. CONSOLE_FONT_INFOEX struct
    34. cbSize dword 0
    35. nFont dword 0
    36. dwFontSize COORD <>
    37. FontFamily dword 0
    38. FontWeight dword 0
    39. FaceName word 32 dup (0)
    40. CONSOLE_FONT_INFOEX ends
    41. .data
    42. STR1 dw 266Ah,266Bh,20h,41Fh,440h,43Eh,449h,430h,439h,20h,263Ah,0Dh,0Ah
    43. STR2 db 'Console',0
    44. STR3 dw 423h,43Ah,430h,437h,430h,43Dh,20h,43Ah,43Eh,434h,20h,443h,441h,442h,440h,\
    45. 43Eh,439h,441h,442h,432h,430h,2Ch,20h,43Dh,435h,20h,438h,441h,43Fh,43Eh,43Bh,44Ch;'Указан код устройства, не используемого в системе'
    46. fontname1: du <Lucida Console>
    47. fontname2: du <Consolas>
    48. SetCurrentConsoleFontEx dq ?
    49. LibName db 'kernel32.dll',0
    50. FunctionName db 'SetCurrentConsoleFontEx',0
    51. .code
    52. WinMain Proc
    53. local hOut:qword
    54. ;local fontuni [64]:byte
    55. local charsWritten : dword
    56. local ConsoleWindow:SMALL_RECT
    57. local myFont : CONSOLE_FONT_INFOEX
    58. mov ecx,offset LibName
    59. invoke LoadLibrary  
    60. mov edx,offset FunctionName
    61. invoke GetProcAddress,eax
    62.         mov SetCurrentConsoleFontEx,rax
    63. invoke FreeConsole;release the existing console
    64. invoke AllocConsole;form the console
    65. invoke GetStdHandle, STD_OUTPUT_HANDLE
    66.         mov hOut,rax
    67. invoke GetLargestConsoleWindowSize, hOut
    68. mov ConsoleWindow.Left,0
    69. mov ConsoleWindow.Top,0
    70. sub ax, MAXSCREENX
    71. sbb edx, edx
    72. and ax, dx
    73. add ax, MAXSCREENX-1
    74. mov ConsoleWindow.Right,ax
    75. shr eax, 16
    76. sub eax, MAXSCREENY
    77. sbb edx, edx
    78. and eax, edx
    79. add eax, MAXSCREENY-1
    80. mov ConsoleWindow.Bottom,ax
    81. invoke SetConsoleWindowInfo, hOut, TRUE, &ConsoleWindow
    82. invoke SetConsoleScreenBufferSize, hOut, MAXSCREENY*10000h+MAXSCREENX
    83. invoke SetConsoleTitle,&STR2
    84. invoke SetConsoleCursorPosition, hOut, 0A0000h
    85. invoke SetConsoleTextAttribute, hOut, BRIGHTGREEN
    86. mov myFont.cbSize, sizeof CONSOLE_FONT_INFOEX
    87. mov myFont.nFont, 0
    88. mov myFont.dwFontSize.X, 0h
    89. mov myFont.dwFontSize.Y, 24
    90. mov myFont.FontFamily, 0
    91. mov myFont.FontWeight, 400
    92. invoke wcscpy,&myFont.FaceName, &fontname1
    93. invoke SetCurrentConsoleFontEx, hOut, FALSE, &myFont
    94. invoke WriteConsoleW, hOut, &STR1, lengthof STR1, &charsWritten, 0
    95. mov myFont.cbSize, sizeof CONSOLE_FONT_INFOEX
    96. mov myFont.nFont, 0
    97. mov myFont.dwFontSize.X, 0h
    98. mov myFont.dwFontSize.Y, 24
    99. mov myFont.FontFamily, 0
    100. mov myFont.FontWeight, 400
    101. invoke wcscpy, &myFont.FaceName, &fontname2
    102. invoke SetCurrentConsoleFontEx, hOut, FALSE, &myFont
    103. invoke WriteConsoleW,hOut,&STR3,lengthof STR3,&charsWritten,0
    104. invoke getchar
    105. invoke FreeConsole
    106. invoke ExitProcess, 0
    107. WinMain endp
    108. end
    00.png
     

    Вложения:

    • 04.zip
      Размер файла:
      2,9 КБ
      Просмотров:
      462
  7. Jin X

    Jin X Active Member

    Публикаций:
    0
    Регистрация:
    15 янв 2009
    Сообщения:
    369
    Адрес:
    Кольца Сатурна
    _qwe8013, всю переписку не читал, но если нужно имя устройства WAVE_MAPPER, то устройство по умолчанию - то же, что и самое первое (нулевое) устройство. waveOutGetDevCaps, 0, ... - это и будет устройство по умолчанию (т.е. WAVE_MAPPER).
     
  8. _qwe8013

    _qwe8013 Active Member

    Публикаций:
    2
    Регистрация:
    30 ноя 2016
    Сообщения:
    123
    Mikl___, благодарю за ответы.
     
  9. Jin X

    Jin X Active Member

    Публикаций:
    0
    Регистрация:
    15 янв 2009
    Сообщения:
    369
    Адрес:
    Кольца Сатурна
    Вообще, моя идея работы с полным именем через MME такова: получаем список устройств через DirectSound (или MME, если DirectSound нет в системе).
    Выводим в ComboBox (для выбора устройства пользователем) этот список, а подтверждения делаем так:
    Проходим по всему списку MME-устройств и сравниваем имя этих устройств с первыми символами (не более 31) из выбранного списка. Т.е. если было выбрано "Динамики (Realtek High Definition Audio)", то ищем "Динамики (Realtek High Definiti" в списке MME-устройств. Если находим, использует его ID (порядковый номер). Если не находим, говорим "пардон" и обновляем список. А не найти мы можем в случае, если пока человек выбирал, устройство отключилось. И проверку даже при отсутствии DirectSound лучше делать, т.к. пока человек выбирал, поменялось устройство по умолчанию и порядковый номер выбранного устройства.

    Но тут есть вопрос: список устройств DirectSound и MME всегда одинаковый?
    И заодно интересно (хотя для данного случая неактуально, ибо проверяем имена, но всё же): если да, то обязательно ли он будет в том же порядке идти?
     
  10. Jin X

    Jin X Active Member

    Публикаций:
    0
    Регистрация:
    15 янв 2009
    Сообщения:
    369
    Адрес:
    Кольца Сатурна
    Кстати, совсем забыл: с waveOut всё понятно, а как быть с waveIn? Ведь для него DirectSound не подойдёт...
    У меня, к примеру, Adobe Audition выводит полные имена устройств записи MME (да, да, я именно про MME сейчас говорю). Где он их берёт? В реестре их нет! Разве что в разделе HKEY_CURRENT_USER\Software\Microsoft\Speech\AudioInput\TokenEnums\MMAudioIn, но сдаётся мне, что это явно не то место, где их нужно искать (там даже уже удалённые устройства есть)...

    WASAPI выдаёт немного другие имена, чем MME/DirectSound, включая устройства вывода.
     
  11. Jin X

    Jin X Active Member

    Публикаций:
    0
    Регистрация:
    15 янв 2009
    Сообщения:
    369
    Адрес:
    Кольца Сатурна
    Если только выбран не WAVE_MAPPER, т.к. там точно название может быть другим.