如何使用键盘延音踏板作为计算机的输入?

如何使用键盘延音踏板作为计算机的输入?

我希望有位超级电子专家能给我一些建议。我该如何获得这个http://www.amazon.co.uk/Cherub-WTB-004-Keyboard-Sustain-Pedal/dp/B000UDVV6E在我的计算机上使用?我基本上想用它来替换/模拟游戏中的按键或其他东西。有这方面经验的人能给点建议吗?我愿意尝试一些简单的软件相关黑客……或者更高级的软件,如果网上有资源的话。

编辑:

踏板波形

我尝试将它插入我的麦克风插孔,瞧,每当我启动(踩下)踏板时,我都会收到一个信号 - 这就是录音(在 Audacity 上)。

第一个“厚”音是由于踩下踏板,其余的只是轻敲。

答案1

为什么要经历这么多麻烦,当你可以买到你想要的东西时?专为 PC 设计的 USB 脚踏板,例如

在此处输入图片描述

它们很便宜,而且能够满足您的需求。

答案2

好吧,已经过去了 7 个月左右,我完全忘记了这件事......今天回来再次尝试,我设法让它工作了。

这是一个适用于我的踏板的简单 Java 程序。它将按压转换为键盘上的“V”(它用于在 cS GO 中激活 +voice_record)

    package pedal2keyboard;
    
    import java.io.ByteArrayOutputStream;
    import java.nio.ByteBuffer;
    import java.nio.ByteOrder;
    
    import javax.sound.sampled.*;
    
    import java.awt.AWTException;
    import java.awt.Robot;
    import java.awt.event.KeyEvent;
    
    /***
     * Author: Dois Koh
     * Date: 27th October 2015
     * 
     * Gets your microphone signal and you can go do whatever you want with it.
     * Right now, it takes signals from my Cherub WTB-004 Keyboard Sustain Pedal, plugged into
     * my microphone jack, and converts it into key presses (holds down V when depressed,
     * releases V when released)
     */
    public class PedalToKeyboard {
    
        // Robot for performing keyboard actions (pressing V)
        public static Robot robot = null;
        
        // Currently 8KHz, 16 bit signal (2 bytes), single channel, signed (+ and -) and BIG ENDIAN format
        public static AudioFormat format = new AudioFormat(8000.0f, 16, 1, true, true);
        
        public static TargetDataLine microphone = null;
        public static boolean pedalPressed = false;
    
        public static void main(String[] args) {
            
            try {
                // Initialize robot for later use
                robot = new Robot();
                
                // Retrieve the line to from which to read in the audio signal
                microphone = AudioSystem.getTargetDataLine(format);
                
                // Open the line in the specified format -
                // Currently 8KHz, 16 bit signal (2 bytes), single channel, signed (+ and -) and BIG ENDIAN format      
                microphone.open(new AudioFormat(8000.0f, 16, 1, true, true));
    
                ByteArrayOutputStream out = new ByteArrayOutputStream();
                byte[] data = new byte[microphone.getBufferSize()/8];
                
                // Begin audio capture.
                microphone.start();
    
                int numBytesRead = 0;
                short previousShort = 0;
                
                // Continue until program is manually terminated
                while (true) {
                    
                    // Read the next chunk of data from the TargetDataLine.
                    numBytesRead = microphone.read(data, 0, data.length);
                    
                    // Reset the buffer (get rid of previous data)
                    out.reset();
                    
                    // Save this chunk of data.
                    out.write(data, 0, numBytesRead);
                    
                    byte[] bytes = out.toByteArray();
                    short[] shorts = new short[bytes.length/2];
                    
                    // to turn bytes to shorts as either big endian or little endian. 
                    ByteBuffer.wrap(bytes).order(ByteOrder.BIG_ENDIAN).asShortBuffer().get(shorts);
                    
                    // Iterate through retrieved 16 bit data (shorts)
                    for (short s : shorts) {
                        
                        // Check if descending or ascending (pedal press is descending, release is ascending)
                        if (s < 0) { // descending                  
                            // make sure drop is large instantaneous drop
                            if (Math.abs(previousShort - s) > 200 && s < -32700) {
                                if (!pedalPressed) {
                                    PedalPressedAction();
                                    previousShort = s;
                                    break;
                                }
                            }
                        } else if (s > 0) { // ascending
                            // make sure increase is large instantaneous increase
                            if (Math.abs(previousShort - s) > 200 && s > 32700) {
                                if (pedalPressed) {
                                    PedalReleasedAction();
                                    previousShort = s;
                                    break;
                                }
                            }
                        }
                        
                        previousShort = s;
                    }
                }    
                
            } catch (LineUnavailableException | AWTException e) {
                e.printStackTrace();
            } finally {
                if (microphone != null)
                    microphone.close();
            }
        }
        
        /***
         * The action to perform when the pedal is depressed
         */
        public static void PedalPressedAction() {
            pedalPressed = true;
            robot.keyPress(KeyEvent.VK_V);
        }
        
        /***
         * The action to perform when the pedal is released
         */
        public static void PedalReleasedAction(){
            pedalPressed = false;
            robot.keyRelease(KeyEvent.VK_V);        
        }
    }

答案3

要真正做到这一点。你真正需要的只是一个键盘。一些小东西,比如拆掉踏板和键盘。您甚至可以将键盘装在踏板内,并用 USB 电缆替换音频线。踏板可能有 3 根导线,+ 和 - 以及电阻导线。只需通过反复试验找到 + 和 - 导线(只有 6 种可能的选择)。将其中一个键连接到踏板中的导线。当您踩下踏板并闭合电路时...按键!

答案4

正如你所发现的,这个踏板只是一个瞬时开关。

您需要一个 midi“头部”设备来读取开关状态并转换为 midi;一种将该头部设备插入计算机的方法;然后使用软件来利用 midi 输入。

或者,您可以研究转换为操纵杆输入的设备。制造驾驶舱模拟器的人使用真实的开关与他们的模拟软件进行交互。如果您采用这种方式,您将使用一个简单的操纵杆到 midi 驱动程序,然后再使用适合与输入一起使用的软件。

请注意,您可以花 10 美元买一个游戏手柄,将导线连接到电路板上,然后将安装在电路板上的 1 美元 Radio Shack 开关连接到一整排脚踏板上。您可以使用 joy-midi 驱动程序将信号路由到 DAW 或 Amp Simulator。

通常,对于音乐界面和录音集成,您需要一个 DAW 应用程序(数字音频工作站)。

还有哇音踏板式音频接口,带有表情踏板端口。这些通常用于吉他,但没有理由不能将它们用作通用音频接口,并且 midi 信号可以路由到任何功能,因此摇杆踏板可用于淡入淡出、音量、哇音、拨动开关等

即使有合适的设备让按钮按下在您的 PC 上注册,您也无法使用 Audacity 来实现这一点。您可以尝试免费的“vsthost”和一些 VST 效果处理器(尝试“simuanalog”,也是免费的)。VSTHost 是一个用于加载放大器模拟的主机,可以将 midi 和操纵杆输入信号路由到 VST 应用程序上的任何公开功能/按钮/拨盘。它有一个内置录音机,然后您可以编辑大胆地查阅文件。

任何能产生电压的东西都可以插入麦克风插孔并产生可记录的信号,只要它不会让计算机起火,即使这样……

所以:总结一下。您需要破解两根电线(剥去 1/4-1/8 英寸电缆的外皮并焊接到游戏手柄上),或者以其他方式将信号以游戏杆或 midi 形式传输到计算机上。然后,您可以将该信号转换为任何可以处理它的东西。Joy2midi、Midi 转换器、midi2joy。

相关内容