USBqemu-wheel icon indicating copy to clipboard operation
USBqemu-wheel copied to clipboard

Feature Request: Support for Karaoke Revolution (Japan) Microphone

Open squalldc opened this issue 3 years ago • 14 comments

Hi,

Would it be possible to add support for the Japanese Karaoke Revolution Microphone? I tried the current version out and it doesn't seem to support it.

I tried your usbdescdump program but it gives a -5 error. This is the info from another usb dump tool:

Information for device AK5370 (VID=0x0556 PID=0x0001):

Connection Information:

Device current bus speed: FullSpeed Device supports USB 1.1 specification Device supports USB 2.0 specification Device address: 0x000A Current configuration value: 0x00 Number of open pipes: 0

Device Descriptor:

0x12 bLength 0x01 bDescriptorType 0x0110 bcdUSB 0x00 bDeviceClass
0x00 bDeviceSubClass
0x00 bDeviceProtocol
0x08 bMaxPacketSize0 (8 bytes) 0x0556 idVendor 0x0001 idProduct 0x0001 bcdDevice 0x01 iManufacturer 0x02 iProduct
0x00 iSerialNumber 0x01 bNumConfigurations Hex dump: 0x12 0x01 0x10 0x01 0x00 0x00 0x00 0x08 0x56 0x05 0x01 0x00 0x01 0x00 0x01 0x02 0x00 0x01

Configuration Descriptor:

0x09 bLength 0x02 bDescriptorType 0x0076 wTotalLength (118 bytes) 0x02 bNumInterfaces 0x01 bConfigurationValue 0x00 iConfiguration 0x80 bmAttributes (Bus-powered Device) 0x2D bMaxPower (90 mA) Hex dump: 0x09 0x02 0x76 0x00 0x02 0x01 0x00 0x80 0x2D

Interface Descriptor:

0x09 bLength 0x04 bDescriptorType 0x00 bInterfaceNumber 0x00 bAlternateSetting 0x00 bNumEndPoints 0x01 bInterfaceClass (Audio Device Class) 0x01 bInterfaceSubClass (Audio Control Interface) 0x00 bInterfaceProtocol (Audio Protocol undefined) 0x00 iInterface Hex dump: 0x09 0x04 0x00 0x00 0x00 0x01 0x01 0x00 0x00

AC Interface Header Descriptor:

0x09 bLength 0x24 bDescriptorType 0x01 bDescriptorSubtype 0x0100 bcdADC 0x0026 wTotalLength (38 bytes) 0x01 bInCollection 0x01 baInterfaceNr(1) Hex dump: 0x09 0x24 0x01 0x00 0x01 0x26 0x00 0x01 0x01

AC Input Terminal Descriptor:

0x0C bLength 0x24 bDescriptorType 0x02 bDescriptorSubtype 0x01 bTerminalID 0x0201 wTerminalType (Microphone) 0x02 bAssocTerminal 0x01 bNrChannels (1 channels) 0x0000 wChannelConfig 0x00 iChannelNames 0x00 iTerminal Hex dump: 0x0C 0x24 0x02 0x01 0x01 0x02 0x02 0x01 0x00 0x00 0x00 0x00

AC Output Terminal Descriptor:

0x09 bLength 0x24 bDescriptorType 0x03 bDescriptorSubtype 0x02 bTerminalID 0x0101 wTerminalType (USB Streaming) 0x01 bAssocTerminal 0x03 bSourceID 0x00 iTerminal Hex dump: 0x09 0x24 0x03 0x02 0x01 0x01 0x01 0x03 0x00

AC Feature Unit Descriptor:

0x08 bLength 0x24 bDescriptorType 0x06 bDescriptorSubtype 0x03 bUnitID 0x01 bSourceID 0x01 bControlSize bmaControls: 0x43 Channel(0) - Mute / Volume / Automatic Gain 0x00 iFeature

Hex dump: 0x08 0x24 0x06 0x03 0x01 0x01 0x43 0x00

Interface Descriptor:

0x09 bLength 0x04 bDescriptorType 0x01 bInterfaceNumber 0x00 bAlternateSetting 0x00 bNumEndPoints 0x01 bInterfaceClass (Audio Device Class) 0x02 bInterfaceSubClass (Audio Streaming Interface) 0x00 bInterfaceProtocol (Audio Protocol undefined) 0x00 iInterface Hex dump: 0x09 0x04 0x01 0x00 0x00 0x01 0x02 0x00 0x00

Interface Descriptor:

0x09 bLength 0x04 bDescriptorType 0x01 bInterfaceNumber 0x01 bAlternateSetting 0x01 bNumEndPoints 0x01 bInterfaceClass (Audio Device Class) 0x02 bInterfaceSubClass (Audio Streaming Interface) 0x00 bInterfaceProtocol (Audio Protocol undefined) 0x00 iInterface Hex dump: 0x09 0x04 0x01 0x01 0x01 0x01 0x02 0x00 0x00

AS Interface Descriptor:

0x07 bLength 0x24 bDescriptorType 0x01 bDescriptorSubtype 0x02 bTerminalLink 0x01 bDelay 0x0001 wFormatTag (PCM) Hex dump: 0x07 0x24 0x01 0x02 0x01 0x01 0x00

AS Format Type 1 Descriptor:

0x17 bLength 0x24 bDescriptorType 0x02 bDescriptorSubtype 0x01 bFormatType (FORMAT_TYPE_1) 0x01 bNrChannels (1 channels) 0x02 bSubframeSize 0x10 bBitResolution (16 bits per sample) 0x05 bSamFreqType (Discrete sampling frequencies) 0x001F40 tSamFreq(1) (8000 Hz) 0x002B11 tSamFreq(2) (11025 Hz) 0x005622 tSamFreq(3) (22050 Hz) 0x00AC44 tSamFreq(4) (44100 Hz) 0x00BB80 tSamFreq(5) (48000 Hz) Hex dump: 0x17 0x24 0x02 0x01 0x01 0x02 0x10 0x05 0x40 0x1F 0x00 0x11 0x2B 0x00 0x22 0x56 0x00 0x44 0xAC 0x00 0x80 0xBB 0x00

Endpoint Descriptor (Audio/MIDI 1.0):

0x07 bLength 0x05 bDescriptorType *** ERROR: Invalid descriptor length 0x07 Hex dump: 0x07 0x05 0x81 0x01 0x64 0x00 0x01

AS Isochronous Data Endpoint Descriptor:

0x07 bLength 0x25 bDescriptorType 0x01 bDescriptorSubtype 0x01 bmAttributes (Sampling Frequency) 0x00 bLockDelayUnits (undefined) 0x0000 wLockDelay Hex dump: 0x07 0x25 0x01 0x01 0x00 0x00 0x00

Microsoft OS Descriptor is not available. Error code: 0x0000001F

String Descriptor Table

Index LANGID String 0x00 0x0000
Hex dump:

0x01 0x0000 "AKM " Hex dump: 0x22 0x03 0x41 0x00 0x4B 0x00 0x4D 0x00 0x20 0x00 0x20 0x00 0x20 0x00 0x20 0x00 0x20 0x00 0x20 0x00 0x20 0x00 0x20 0x00 0x20 0x00 0x20 0x00 0x20 0x00 0x20 0x00 0x20 0x00

0x02 0x0000 "AK5370 " Hex dump: 0x22 0x03 0x41 0x00 0x4B 0x00 0x35 0x00 0x33 0x00 0x37 0x00 0x30 0x00 0x20 0x00 0x20 0x00 0x20 0x00 0x20 0x00 0x20 0x00 0x20 0x00 0x20 0x00 0x20 0x00 0x20 0x00 0x20 0x00


Whole Device Descriptor as hex dump: 0x12, 0x01, 0x10, 0x01, 0x00, 0x00, 0x00, 0x08, 0x56, 0x05, 0x01, 0x00, 0x01, 0x00, 0x01, 0x02, 0x00, 0x01

Whole Configuration Descriptor as hex dump: 0x09, 0x02, 0x76, 0x00, 0x02, 0x01, 0x00, 0x80, 0x2D, 0x09, 0x04, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x09, 0x24, 0x01, 0x00, 0x01, 0x26, 0x00, 0x01, 0x01, 0x0C, 0x24, 0x02, 0x01, 0x01, 0x02, 0x02, 0x01, 0x00, 0x00, 0x00, 0x00, 0x09, 0x24, 0x03, 0x02, 0x01, 0x01, 0x01, 0x03, 0x00, 0x08, 0x24, 0x06, 0x03, 0x01, 0x01, 0x43, 0x00, 0x09, 0x04, 0x01, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x09, 0x04, 0x01, 0x01, 0x01, 0x01, 0x02, 0x00, 0x00, 0x07, 0x24, 0x01, 0x02, 0x01, 0x01, 0x00, 0x17, 0x24, 0x02, 0x01, 0x01, 0x02, 0x10, 0x05, 0x40, 0x1F, 0x00, 0x11, 0x2B, 0x00, 0x22, 0x56, 0x00, 0x44, 0xAC, 0x00, 0x80, 0xBB, 0x00, 0x07, 0x05, 0x81, 0x01, 0x64, 0x00, 0x01, 0x07, 0x25, 0x01, 0x01, 0x00, 0x00, 0x00


Connection path for device: USB xHCI Compliant Host Controller Root Hub AK5370 (VID=0x0556 PID=0x0001) Port: 1

Brought to you by TDD v2.15.0, Jun 8 2020, 17:18:07

Thanks!

squalldc avatar Feb 07 '21 06:02 squalldc

Seems it works, at least with SLPM-62450.

jackun avatar Feb 09 '21 08:02 jackun

Thanks for testing.

Do you get the score changing on the top left when singing?

I tried all the mic options (logitech, singstar, etc with WASAPI) but it still doesn't work (I don't get any errors in pcsx2), but when I enable logging, I get this in the log:

usbqemu wheel mod plugin version 0.10.1 USBinit USBopen USBqemu: failed to create device '' on port 0

  • Known 32bit write at address 1f801614 value ffffffff
  • Known 32bit read at address 1f801604: 00000000
  • Known 32bit write at address 1f801604 value 00000000
  • Known 32bit write at address 1f801608 value 00000001
  • Known 32bit write at address 1f801604 value 00000000
  • Known 32bit read at address 1f801608: 00000000
  • Known 32bit write at address 1f801680 value 00000001
  • Known 32bit write at address 1f801620 value 000a7cf0
  • Known 32bit write at address 1f801628 value 000a7d00 ....

Is this maybe why it doesn't work on my machine (PCSX2 v1.60 and USBqemu-wheel-0.10.1-Win32.dll)

squalldc avatar Feb 09 '21 22:02 squalldc

Oh, no. It isn't in plugin yet. These japanese versions are picky. Trying to get it in the plugin soon. If you are able to build pcsx2 yourself, you can try usb-subtypes branch. But seems there's some in-game buffer overflow issues so it crackles etc.

jackun avatar Feb 09 '21 22:02 jackun

Ok thanks. There's no rush, just take your time. Let me know if you need any further usb dumps from the microphone.

Is usbwheel getting merged into pcsx2? I had tried to build usbwheel, but it had some issues that I haven't fully looked into yet on mingw windows. I'll try to build pcsx2 later.

squalldc avatar Feb 10 '21 02:02 squalldc

I tried the pcsx2 build out and it fails to initialize the mic on my machine in:

audiodev-wasapi.cpp:150 (MMAudioDevice::Init())

HRESULT err = CoCreateInstance(CLSID_MMDeviceEnumerator, NULL, CLSCTX_ALL, IID_IMMDeviceEnumerator, (void**)&mmEnumerator);

with the error: 0x800401f0 : CoInitialize has not been called. (it looks like it's not getting called in all circumstances, eg if you don't bring up a file selector to choose the iso, it won't get called so CoCreateInstance fails). Not sure if this happens on the normal branch.

I put in a quick hack on my side to test it out and it looks promising, but as you mentioned, I get cracking audio as well.

btw, the mic is the official Japanese Konami PS2 Karaoke Revolution mic with product code RU042 if you want the correct device naming.

squalldc avatar Feb 11 '21 00:02 squalldc

the RU042 allows for a second microphone to be plugged in. it's a two player mic. i wonder if this the issue of trying to use both channels for one player img001 (2)

seta-san avatar Feb 18 '21 19:02 seta-san

Descriptor is just a mono mic so it probably has an integrated usb hub.

i wonder if this the issue of trying to use both channels for one player

What's this? Can't read japanese so just smashing buttons until it goes in-game :D so idk how to set to 2 players to test.

jackun avatar Feb 18 '21 20:02 jackun

i'm having the RU042 come in on monday but i don't think it has a usb hub on it. it looks like an analog plug on the RU042 allowing plugging in the RU044

seta-san avatar Feb 18 '21 20:02 seta-san

translated

seta-san avatar Feb 18 '21 20:02 seta-san

It may reinitialize or provide different usb descriptors when a slave microphone is connected. You can try to connect a slave mic, then connect the usb and verify if the same descriptors are provided.

Florin9doi avatar Feb 18 '21 20:02 Florin9doi

reinitialize or provide different usb descriptors when a slave microphone is connected. You can try to connect a slave mic, then connect the usb and verify if the same descriptors are provid

this does say to have the slave mic plugged into the base mic before powering on the ps2. you might be right.

seta-san avatar Feb 18 '21 20:02 seta-san

Hmm, i think it should also return only 1ms worth of data even though packet length is the full 100 bytes of endpoints max packet length. Testing.. holy shit, might fix the crackling. In-game music is too loud :cry: ~~or not... singstar is weird~~ (e: 2 channels doh) but Karaoke is near perfect.

jackun avatar Feb 18 '21 20:02 jackun

What's this? Can't read japanese so just smashing buttons until it goes in-game :D so idk how to set to 2 players to test.

The third option in the main screen (チームバトル) (Team Battle) is the multiplayer option. Players on each team just take in turns.

It may reinitialize or provide different usb descriptors when a slave microphone is connected. You can try to connect a slave mic, then connect the usb and verify if the same descriptors are provided.

I don't have the official 2nd mic, but I tried plugging in other mics into the main one it still shows the same usb decriptor data.

I tried playing the team battle with another mic plugged into the bottom of the official mic and it seems like it might be just an analog pass through. Either mic can sing and it still gets scored.

squalldc avatar Feb 19 '21 00:02 squalldc

is the usb-subtypes branch ready to merge?

seta-san avatar Nov 17 '21 07:11 seta-san