Hi to everbody!
I have currently 2x BCF2000 running.
Windows7 64 bit, 2x BCF2000 Firmware 1.10,USB Mode 3 for both, Mackie Emulation, Behringer USB Driver 1.0.10.0, BCFView (2 Instances in different directories),Cubase 5 & Cubase 8, Sonar. All 16 Channels are running
The only annoying problem is that there must be a driver bug in the midi-port-names. eq. 3-BCF2000à port 1,4-BCF2000È port 1.
The 10-character is always changing on driver-restart.(power on) which makes cubase always loose the connection. Does anyone have a solution?
Does anybody mave have a newer driver (Behringer, 15.12.2009, Version 1.0.10.0) Or is it maybe a firmware problem?
A workaround is to install 2 virtual midi-loopbacks and a virtual midi-through and a setup routine which is not very elegant and doesn't work always.
any help is appreciated!
Irie Christmas!
burning
As far as I know, this
As far as I know, this problem only occurs with the Behringer 1.0.10 USB MIDI driver: I've never seen it with any of the other drivers I discuss in section 4, subsection 4 of the BC Manager manual (downloadable from https://mountainutilities.eu/bcmanager). ("Windows USB drivers for BCc2000.pdf" (downloadable from https://mountainutilities.eu/bc2000) is an (old) "reprint" of this section.)
So the problem is definitely not caused by the BCF2000's firmware.
I've run into this problem from time to time ever since I started using this driver in Windows 7 (64-bit). I've often wondered why nobody(?) else has complained about it. IIRC I mentioned it once in the Yahoo BC2000 forum maybe five years ago, but nothing came of that.
Since I haven't used my BCF2000 and BCR2000 very much in the last five years, I've never actively investigated this problem.
However, now that you've brought it up, lots of questions are popping into my head:
One "solution" would be to uninstall the Behringer 1.0.10 driver and start using the generic Microsoft "USB Audio Device" driver. However, as discussed in the documents I mentioned above, this driver has its own problems, which might be even worse.
Off-topic: instead of BCFView, you might consider using BC Manager: this gives you customizable "BCFView-compatible" monitor windows for up to 16 BCF2000s in Mackie emulation modes. (It also gives you up to 4 "generic" (non-BCF2000 specific) Mackie monitor windows).
Thanks for reply!
Thanks for reply!
"Does the problem only occur with Windows 7"
I don't have any 32-bit windows anymore (since 2010?) but from what i can remember this is only an x64 problem. I also don't know about win8/10.
"Perhaps it's a string length error due to a confusion between ANSI and Unicode?"
For me it also has something to do with string building. (maybe not Multibyte<->Unicode related)
Every virtual midi connection just gets the letter after BCF2000 increased ( binary+1). but he forgot to initalize the memory. so it starts in a random way.
that's all;-) would take 3 minutes to fix if i had the drivers source code...
Does the number of switched-on BCF/R2000s matter? Does it matter to which USB ports the BCF/R2000s are connected?
Yes!. [Sarcasm on]: On a clean&fresh windows and only 1 time plugged in usb device and never change usb-ports windows manage to find the device again..
[/Sarcasm off]. You have this problem with all windows-usb devices (as you already mentioned) and the registry. It tend's to forget the previous connections and overflow the registry. ( bluetooth also).. usb hubs,hibernate etc. add another layers of problems. [i worked professionally on that topic. on the fly register&connect is more for linux.. but that's what i want to do. plug&play. btw. xbox can to this in it's usb-stack. reconnect usb-devices ].
"Does it matter to which USB ports the BCF/R2000s are connected?"
Yes but only the first digits are affected. "1-BCF2000 port1" get's to "4-BCF2000 port1" if you change ports. that'ok. (even i don't like windows usb enumerating...)
btw. BC Manager also has problems with the names and remembering midiport's with the weird names. (sonar&cubase also). What i do in my source code.. and i believe bcfviewer also.. is just ignoring the full name, and do like a strstr("BCF2000") do get the port number... (very ugly..)
BCFManager & Mackie Monitor
I tried it many times during the years but didn't manage to get it right with 2x BCF2000. ( of course behringer problem). Although i like ( and need) a bigger font for the Mackie Control Display i currently use BCView, because it can open the port again after restarting...
cheers
burning
inspired by the idea it maybe
inspired by the idea it maybe a multibyte/unicode problem i dumped the Ansi/Unicode midiOutGetDevCaps on my machine.
I have windows 7 english, system locale English(United State) but with region german.
And you are also right!. the wrong unicode string causes troubles!
I detected an interseting behavior. Behringer driver seams to initialize the weird character with 0x100 and later on with "device.1" or something else.
(unitialized local variable?).
So if you query the device with Unicode version and use just the name as 0-terminated string you are in trouble..
MIDIOUTCAPS2W cout;
memset(&cout,0,sizeof(cout));
midiOutGetDevCapsW(i, (MIDIOUTCAPSW*)&cout, sizeof(cout));
- szPname 0x000000000012f718 L"4- BCF2000Ā port 1" wchar_t[0x00000020]
[0x00000000] 0x0034 '4' wchar_t
[0x00000001] 0x002d '-' wchar_t
[0x00000002] 0x0020 ' ' wchar_t
[0x00000003] 0x0042 'B' wchar_t
[0x00000004] 0x0043 'C' wchar_t
[0x00000005] 0x0046 'F' wchar_t
[0x00000006] 0x0032 '2' wchar_t
[0x00000007] 0x0030 '0' wchar_t
[0x00000008] 0x0030 '0' wchar_t
[0x00000009] 0x0030 '0' wchar_t
[0x0000000a] 0x0100 'Ā' wchar_t <-- classic overflow or big endian?
[0x0000000b] 0x0020 ' ' wchar_t
[0x0000000c] 0x0070 'p' wchar_t
[0x0000000d] 0x006f 'o' wchar_t
[0x0000000e] 0x0072 'r' wchar_t
[0x0000000f] 0x0074 't' wchar_t
[0x00000010] 0x0020 ' ' wchar_t
[0x00000011] 0x0031 '1' wchar_t
[0x00000012] 0x0000 '\0' wchar_t
[0x00000013] 0xbaad '몭' wchar_t <--- unicode shows bad character
[0x00000014] 0xf00d '' wchar_t
[0x00000015] 0xbaad '몭' wchar_t
[0x00000016] 0xf00d '' wchar_t
[0x00000017] 0xbaad '몭' wchar_t
[0x00000018] 0xf00d '' wchar_t
[0x00000019] 0xbaad '몭' wchar_t
[0x0000001a] 0xf00d '' wchar_t
[0x0000001b] 0xbaad '몭' wchar_t
[0x0000001c] 0xf00d '' wchar_t
[0x0000001d] 0xbaad '몭' wchar_t
[0x0000001e] 0xf00d '' wchar_t
[0x0000001f] 0xbaad '몭' wchar_t <-- not 0 terminated!
MIDIOUTCAPS2A cout;
memset(&cout,0,sizeof(cout));
midiOutGetDevCapsA(i, (MIDIOUTCAPSA*)&cout, sizeof(cout));
- szPname 0x000000000019f728 "4- BCF2000A port 1" char[0x00000020]
[0x00000000] 0x34 '4' char
[0x00000001] 0x2d '-' char
[0x00000002] 0x20 ' ' char
[0x00000003] 0x42 'B' char
[0x00000004] 0x43 'C' char
[0x00000005] 0x46 'F' char
[0x00000006] 0x32 '2' char
[0x00000007] 0x30 '0' char
[0x00000008] 0x30 '0' char
[0x00000009] 0x30 '0' char
[0x0000000a] 0x41 'A' char <--- here overflow would be ok... defaults to 'A' , or device 4 port 1?!?
[0x0000000b] 0x20 ' ' char
[0x0000000c] 0x70 'p' char
[0x0000000d] 0x6f 'o' char
[0x0000000e] 0x72 'r' char
[0x0000000f] 0x74 't' char
[0x00000010] 0x20 ' ' char
[0x00000011] 0x31 '1' char
[0x00000012] 0x00 '\0' char <-- windows conversion cleans out bad unicode string
[0x00000013] 0x00 '\0' char
[0x00000014] 0x00 '\0' char
[0x00000015] 0x00 '\0' char
[0x00000016] 0x00 '\0' char
[0x00000017] 0x00 '\0' char
[0x00000018] 0x00 '\0' char
[0x00000019] 0x00 '\0' char
[0x0000001a] 0x00 '\0' char
[0x0000001b] 0x00 '\0' char
[0x0000001c] 0x00 '\0' char
[0x0000001d] 0x9d '' char
[0x0000001e] 0x00 '\0' char
[0x0000001f] 0x00 '\0' char
Unicode
- szPname 0x000000000024f8a8 L"3- BCF2000́ port 1" wchar_t[0x00000020]
[0x00000000] 0x0033 '3' wchar_t
[0x00000001] 0x002d '-' wchar_t
[0x00000002] 0x0020 ' ' wchar_t
[0x00000003] 0x0042 'B' wchar_t
[0x00000004] 0x0043 'C' wchar_t
[0x00000005] 0x0046 'F' wchar_t
[0x00000006] 0x0032 '2' wchar_t
[0x00000007] 0x0030 '0' wchar_t
[0x00000008] 0x0030 '0' wchar_t
[0x00000009] 0x0030 '0' wchar_t
[0x0000000a] 0x0301 '́' wchar_t <- does this mean device 3 port 1 ?!?
[0x0000000b] 0x0020 ' ' wchar_t
[0x0000000c] 0x0070 'p' wchar_t
[0x0000000d] 0x006f 'o' wchar_t
[0x0000000e] 0x0072 'r' wchar_t
[0x0000000f] 0x0074 't' wchar_t
[0x00000010] 0x0020 ' ' wchar_t
[0x00000011] 0x0031 '1' wchar_t
[0x00000012] 0x0000 '\0' wchar_t
[0x00000013] 0xbaad '몭' wchar_t <-- again bad character
[0x00000014] 0xf00d '' wchar_t
[0x00000015] 0xbaad '몭' wchar_t
[0x00000016] 0xf00d '' wchar_t
[0x00000017] 0xbaad '몭' wchar_t
[0x00000018] 0xf00d '' wchar_t
[0x00000019] 0xbaad '몭' wchar_t
[0x0000001a] 0xf00d '' wchar_t
[0x0000001b] 0xbaad '몭' wchar_t
[0x0000001c] 0xf00d '' wchar_t
[0x0000001d] 0xbaad '몭' wchar_t
[0x0000001e] 0xf00d '' wchar_t
[0x0000001f] 0xbaad '몭' wchar_t
Ansi
- szPname 0x000000000019f728 "3- BCF2000´ port 1" char[0x00000020]
[0x00000000] 0x33 '3' char
[0x00000001] 0x2d '-' char
[0x00000002] 0x20 ' ' char
[0x00000003] 0x42 'B' char
[0x00000004] 0x43 'C' char
[0x00000005] 0x46 'F' char
[0x00000006] 0x32 '2' char
[0x00000007] 0x30 '0' char
[0x00000008] 0x30 '0' char
[0x00000009] 0x30 '0' char
[0x0000000a] 0xb4 '´' char <-- bad again
[0x0000000b] 0x20 ' ' char
[0x0000000c] 0x70 'p' char
[0x0000000d] 0x6f 'o' char
[0x0000000e] 0x72 'r' char
[0x0000000f] 0x74 't' char
[0x00000010] 0x20 ' ' char
[0x00000011] 0x31 '1' char
[0x00000012] 0x00 '\0' char
[0x00000013] 0x00 '\0' char
[0x00000014] 0x00 '\0' char
[0x00000015] 0x00 '\0' char
[0x00000016] 0x00 '\0' char
[0x00000017] 0x00 '\0' char
[0x00000018] 0x00 '\0' char
[0x00000019] 0x00 '\0' char
[0x0000001a] 0x00 '\0' char
[0x0000001b] 0x00 '\0' char
[0x0000001c] 0x00 '\0' char
[0x0000001d] 0x9d '' char
[0x0000001e] 0x00 '\0' char
[0x0000001f] 0x00 '\0' char
Unicode for port 2
- szPname 0x000000000024f8a8 L"3- BCF2000́ port 2" wchar_t[0x00000020]
[0x00000000] 0x0033 '3' wchar_t
[0x00000001] 0x002d '-' wchar_t
[0x00000002] 0x0020 ' ' wchar_t
[0x00000003] 0x0042 'B' wchar_t
[0x00000004] 0x0043 'C' wchar_t
[0x00000005] 0x0046 'F' wchar_t
[0x00000006] 0x0032 '2' wchar_t
[0x00000007] 0x0030 '0' wchar_t
[0x00000008] 0x0030 '0' wchar_t
[0x00000009] 0x0030 '0' wchar_t
[0x0000000a] 0x0301 '́' wchar_t <--- stays on 3.1
[0x0000000b] 0x0020 ' ' wchar_t
[0x0000000c] 0x0070 'p' wchar_t
[0x0000000d] 0x006f 'o' wchar_t
[0x0000000e] 0x0072 'r' wchar_t
[0x0000000f] 0x0074 't' wchar_t
[0x00000010] 0x0020 ' ' wchar_t
[0x00000011] 0x0032 '2' wchar_t
[0x00000012] 0x0000 '\0' wchar_t
[0x00000013] 0xbaad '몭' wchar_t
[0x00000014] 0xf00d '' wchar_t
[0x00000015] 0xbaad '몭' wchar_t
[0x00000016] 0xf00d '' wchar_t
[0x00000017] 0xbaad '몭' wchar_t
[0x00000018] 0xf00d '' wchar_t
[0x00000019] 0xbaad '몭' wchar_t
[0x0000001a] 0xf00d '' wchar_t
[0x0000001b] 0xbaad '몭' wchar_t
[0x0000001c] 0xf00d '' wchar_t
[0x0000001d] 0xbaad '몭' wchar_t
[0x0000001e] 0xf00d '' wchar_t
[0x0000001f] 0xbaad '몭' wchar_t