Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Feature Request: Support for Karaoke Revolution (Japan) Microphone #63

Open
squalldc opened this issue Feb 7, 2021 · 14 comments
Open

Comments

@squalldc
Copy link

squalldc commented Feb 7, 2021

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!

@jackun
Copy link
Owner

jackun commented Feb 9, 2021

Seems it works, at least with SLPM-62450.

@squalldc
Copy link
Author

squalldc commented Feb 9, 2021

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)

@jackun
Copy link
Owner

jackun commented Feb 9, 2021

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.

@squalldc
Copy link
Author

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
Copy link
Author

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.

@seta-san
Copy link

seta-san commented Feb 18, 2021

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)

@jackun
Copy link
Owner

jackun commented Feb 18, 2021

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.

@seta-san
Copy link

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
Copy link

translated

@Florin9doi
Copy link
Contributor

Florin9doi commented Feb 18, 2021

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.

@seta-san
Copy link

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.

@jackun
Copy link
Owner

jackun commented Feb 18, 2021

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 😢 or not... singstar is weird (e: 2 channels doh) but Karaoke is near perfect.

@squalldc
Copy link
Author

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.

@seta-san
Copy link

is the usb-subtypes branch ready to merge?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

4 participants