According to a particular class of implementations, a stringed instrument includes a body having a bridge and a saddle mounted thereon. The instrument includes a neck and a headstock. A nut is disposed where the neck and the headstock meet. The headstock has a plurality of tuning machines mounted thereon. A fretboard is mounted on the neck and the body. The fretboard extends from the nut and has a plurality of electrically conductive frets. The instrument has a plurality of electrically conductive strings. Each string extends from a corresponding one of the tuning machines, over the nut, parallel with the fretboard, over the saddle, and is secured to the bridge. The stringed instrument includes fret scanning circuitry configured to conduct a sequence of full board scans. Each full board scan includes selectively applying drive signals to the strings, selectively measuring fret signals resulting from the drive signals for adjacent pairs of the frets, and generating fret data using the fret signals. The fret data represent one or more fret hits. Each fret hit represents a corresponding one of the pairs of frets bridged by a corresponding one of the strings. The fret scanning circuitry is further configured to compare the fret data for consecutive full board scans, determine that an amplitude of a first fret signal for a first pair of frets and a first string and representing a first fret hit declines by less than a dithering gap amount for each of a first number of the consecutive full board scans, and retain the first fret hit as a valid fret hit even if the amplitude of the first fret signal falls below a fret hit threshold.
According to some implementations, the fret scanning circuitry is configured to release the first fret hit after the first fret signal declines by less than the dithering gap amount for each of a second number of the consecutive full board scans. According to a specific implementation, the first number is greater than or equal to a programmable dither threshold count, and the second number is greater than or equal to a programmable dither timeout count.
According to some implementations, the fret scanning circuitry is configured to determine, before starting to determine that the amplitude of the first fret signal declines, that the first fret hit was reported in at least one previous full board scan, and that a number of simultaneous fret hits are currently being reported.
According to some implementations, the fret scanning circuitry is configured to determine that an amplitude of a second fret signal for a second pair of frets and the first string exceeds an amplitude threshold higher than the fret hit threshold, the second pair of frets trailing the first pair of frets.
According to some implementations, the fret scanning circuitry is configured to register the first fret hit only if the first fret hit exceeds the fret hit threshold for a third number of the consecutive scans. According to a specific implementation, the fret hits correspond to different note transition types, and the fret scanning circuitry is configured to employ different consecutive scan thresholds to register a fret hit for the different note transition types.
According to some implementations, the fret scanning circuitry is configured to determine, for each of the strings, if the string is being touched but not fretted. According to a specific implementation, the fret scanning circuitry is configured to determine, for each of the strings, if the string is being touched but not fretted by charging the string, generating a value representing the charge on the string, and comparing the value to a touch scan threshold.
According to some implementations, the fret scanning circuitry is configured to vary the fret hit threshold based on a number of the strings being simultaneously fretted.
According to another class of implementations, a fret scanning system is provided for use with a string instrument having a plurality of electrically conductive frets and a plurality of electrically conductive strings. The fret scanning system includes circuitry and one or more processors configured to use the circuitry to conduct a sequence of full board scans. Each full board scan including selectively applying drive signals to the strings, selectively measuring fret signals resulting from the drive signals for adjacent pairs of the frets, and generating fret data using the fret signals. The fret data represent one or more fret hits. Each fret hit represents a corresponding one of the pairs of frets bridged by a corresponding one of the strings. The one or more processors are further configured to compare the fret data for consecutive full board scans, determine that an amplitude of a first fret signal for a first pair of frets and a first string and representing a first fret hit declines by less than a dithering gap amount for each of a first number of the consecutive full board scans, and retain the first fret hit as a valid fret hit even if the amplitude of the first fret signal falls below a fret hit threshold.
According to some implementations, the one or more processors are configured to release the first fret hit after the first fret signal declines by less than the dithering gap amount for each of a second number of the consecutive full board scans. According to a specific implementation, the first number is greater than or equal to a programmable dither threshold count, and the second number is greater than or equal to a programmable dither timeout count.
According to some implementations, the one or more processors are configured to determine, before starting to determine that the amplitude of the first fret signal declines, that the first fret hit was reported in at least one previous full board scan, and that a number of simultaneous fret hits are currently being reported.
According to some implementations, the one or more processors are configured to determine that an amplitude of a second fret signal for a second pair of frets and the first string exceeds an amplitude threshold higher than the fret hit threshold, the second pair of frets trailing the first pair of frets.
According to some implementations, the one or more processors are configured to register the first fret hit only if the first fret hit exceeds the fret hit threshold for a third number of the consecutive scans. According to a specific implementation, the fret hits correspond to different note transition types, and the one or more processors are configured to employ different consecutive scan thresholds to register a fret hit for the different note transition types.
According to some implementations, the one or more processors are configured to determine, for each of the strings, if the string is being touched but not fretted. According to a specific implementation, the one or more processors are configured to determine, for each of the strings, if the string is being touched but not fretted by charging the string using the circuitry, generating a value representing the charge on the string, and comparing the value to a touch scan threshold.
According to some implementations, the one or more processors are configured to vary the fret hit threshold based on a number of the strings being simultaneously fretted.
According to another class of implementations, systems, methods and computer program products are provided in which fretting data are received that represent fretting hand positions for strings of a stringed instrument. String data are received that represent vibrations of the strings of the stringed instrument. A trigger message is generated for a first string of the stringed instrument. A first fundamental frequency estimate is determined for the first string by performing a spectral analysis of the string data for the first string. A second fundamental frequency estimate is determined for the first string using the fretting data for the first string. The first fundamental frequency estimate is determined to correspond to a harmonic of the second fundamental frequency estimate. The first fundamental frequency estimate is corrected using the second fundamental frequency estimate.
According to some implementations, a pitch estimate is initially reported for the first string based on the first fundamental frequency estimate. After a delay, the pitch estimate is reported for the first string based on the second fundamental frequency estimate. When an amplitude of the string data for the first string falls below a first threshold, a current value of the pitch estimate for the first string is locked. When the amplitude of the string data for the first string falls below a second threshold, reporting of the pitch estimate for the first string is terminated.
According to some implementations, a trigger message is received for a second string of the stringed instrument. A bend signal is received for the second string. The bend signal indicates that the second string is bent parallel to a top surface of the stringed instrument. Reporting of a pitch estimate for the second string based on the fretting data for the second string is inhibited.
According to some implementations, a trigger message is received for a second string of the stringed instrument. A bend signal is received for the second string. The bend signal indicates that the second string is bent parallel to a top surface of the stringed instrument. A fundamental frequency estimate is determined for the second string using the fretting data for the second string. The fundamental frequency estimate for the second string is modified using the bend signal.
According to another class of implementations, a saddle component is provided for mounting adjacent a surface of a stringed instrument and securing an end of a string of the stringed instrument. The saddle component includes a body having a cantilevered structure extending therefrom. The cantilevered structure is configured to receive the string and to mechanically vibrate with a vibration of the string. The cantilevered structure includes a unimorph piezoelectric element oriented such that a primary planar orientation of the piezoelectric element is substantially perpendicular to the surface of the stringed instrument. The piezoelectric element is mechanically biased such that the piezoelectric element is deformed relative to the primary planar orientation.
According to some implementations, the piezoelectric element is disposed in a slot in the cantilevered structure, and the piezoelectric element is mechanically biased by mechanical components in the slot.
According to some implementations, the piezoelectric element is disposed in a slot in the cantilevered structure, and the piezoelectric element is mechanically biased by a cured material that secures the piezoelectric element in the slot.
According to some implementations, the piezoelectric element is also mechanically biased due to tension of the string such that the piezoelectric element is deformed in a direction substantially perpendicular to the surface of the string instrument.
According to another class of implementations, a saddle component is provided for mounting adjacent a surface of a stringed instrument and securing an end of a string of the stringed instrument. The saddle component includes a body having a cantilevered structure extending therefrom. The cantilevered structure is configured to receive the string and to mechanically vibrate with a vibration of the string. The saddle component further includes an inductor coil and an inductor core element. The inductor coil and the inductor core element are integrated with the body and the cantilevered structure of the saddle component such that movement of the cantilevered structure relative to the body causes corresponding movement between the inductor coil and the inductor core element, thereby changing an inductance of the inductor coil.
According to some implementations, the inductor coil is integrated with a portion of the body of the saddle component adjacent the cantilevered structure, and the inductor core element extends from the cantilevered structure into a cavity of the inductor coil.
According to some implementations, the inductor coil is integrated with the cantilevered structure, and the inductor core element extends from a portion of the body of the saddle component adjacent the cantilevered structure into a cavity of the inductor coil.
According to some implementations, the saddle component includes a piezoelectric element integrated with the cantilevered structure. According to a specific implementation, the piezoelectric element is a unimorph piezoelectric element oriented such that a primary planar orientation of the piezoelectric element is substantially perpendicular to the surface of the stringed instrument. The piezoelectric element is mechanically biased such that the piezoelectric element is deformed relative to the primary planar orientation.
A further understanding of the nature and advantages of various implementations may be realized by reference to the remaining portions of the specification and the drawings.
Techniques are described herein that handle various aspects of converting the mechanical energy of instrument strings to digital representations for use in a variety of applications. These techniques include designs for string transducers (e.g., pickups), fret scanners, and pitch detection systems, as well as signal processing and other techniques that enhance the performance and reliability of such designs. Reference will now be made in detail to specific implementations. Examples of these implementations are illustrated in the accompanying drawings. It should be noted that these examples are described for illustrative purposes and are not intended to limit the scope of this disclosure. Rather, alternatives, modifications, and equivalents of the described implementations are included within the scope of this disclosure as defined by the appended claims. In addition, specific details may be provided in order to promote a thorough understanding of the described implementations. Some implementations within the scope of this disclosure may be practiced without some or all of these details. Further, well known features may not have been described in detail for the sake of clarity.
As is well known, piezoelectric materials convert mechanical energy to electrical energy or vice versa. A unimorph piezoelectric element is a piezoelectric element having a single piezoelectric layer (e.g., PZT or lead zirconate titanate) bonded to a non-piezoelectric elastic layer (e.g., steel or titanium) as illustrated, for example, by the cantilever mounted piezoelectric element 200 shown in
Referring again to
Some conventional pickup designs have difficulty or are intentionally designed to inhibit the transducing of string harmonic components that are perpendicular to the face of the instrument. Instrument strings normally have a primary mode of vibration that is parallel to the face of the instrument. However, musicians often intentionally employ side-to-side bending of a string to produce pitch variations which force many of a string's harmonic components out of the plane that is parallel to the face of the instrument. Such harmonic components may therefore be lost when pickups are used to do not transduce such components well. According to a particular class of implementations, a unimorph piezoelectric element is mechanically biased, e.g., deformed relative to its primary planar orientation, such that it captures components of the fundamental and harmonics of the string's vibrations that are both parallel and perpendicular to the face of the instrument. Two such implementations are illustrated in
View A1 of
An unbiased unimorph responds only to pressure regardless of the direction. As saddle component 100 converts the physical displacement of the string into an electrical signal, the mechanical biasing of piezoelectric element 102 provides the polarity of this electrical signal. That is, without the bias (view A), a movement either up or down from center (relative to the page) would result in an increase in pressure applied to the element and therefore a positive excursion of the electrical signal for either direction. With the mechanical bias (e.g., view A2), an upward motion of the tonearm releases pressure from the element (causing a negative electrical excursion) and a downward motion increases pressure on the element (positive electrical excursion). The polarity created by mechanical bias thereby enables the predictable operation of the system.
Moreover, there is another mechanical biasing action in the plane perpendicular to the face of the instrument caused by the tension of the instrument. As a result, movement of the string movement toward the face of the instrument causes an increase in pressure (positive electrical signal) and movement of the string away from the face decreases pressure (negative signal). This enables the capturing of out of plane harmonics associated with, for example, bent notes as described above.
A unimorph piezoelectric element 302 generates an electrical signal in response to vibration of an instrument string. A preamp 304 buffers the signal from element 302 so that it can be converted into the digital domain for processing by CPU 305 by an analog-to-digital converter (ADC) 306. CPU 305 may be any of a wide variety of digital signal processors or controllers suitable for providing the processing capabilities and functionalities described herein, may be integrated with or remote from the stringed instrument, and may be implemented in hardware, software, firmware, or any combination thereof. For example, CPU 305 may be included in a StringPort, a hardware and software bundle for polyphonic instruments from Keith McMillen Instruments various characteristics of which are described in U.S. Pat. No. 8,581,086 entitled Computer Interface for Polyphonic Stringed Instruments, the entire disclosure of which is incorporated herein by reference for all purposes. Alternatively, CPU 305 may be implemented using one or more microprocessors, one or more application-specific integrated circuits, one or more field-programmable gate arrays, or any suitable type of device; each of which may be onboard or remote from the stringed instrument.
Accurately determining the pitch of a vibrating string based on a pickup signal typically takes several cycles of the string's vibration. For a low-pitched string, this can be as long as 25-50 milliseconds. Depending on the application (e.g., controlling a synthesizer), this may be too long from the musician's perspective. A variety of fret scanning techniques have been developed over the years to address this issue. Such techniques use data gathered from the frets and strings of an instrument to determine the musician's fretting hand position, and thus the approximate pitch of the intended note. Having this information before the string starts to vibrate can help improve the performance of pitch tracking techniques. One such technique for determining the fretting hand position is described in U.S. Pat. No. 4,468,997 entitled Fretboard to Synthesizer Interface Apparatus, the entire disclosure of which is incorporated herein by reference for all purposes.
Fret scanning techniques will now be described that use fret signals from adjacent pairs of frets to provide robust indicators of fretted instrument strings. A stringed musical instrument is outfitted with conductive strings and frets that allow the fret board of the instrument to be scanned for detection of fretted notes that are intended to be played. According to some implementations, strings that are un-fretted but touched are also detected. The information derived from these detections enable conversion of the playing of the instrument into digital information that may be used, for example, to control a synthesizer.
The fundamental principle applied by fret scanning techniques enabled by the present disclosure is Ohm's Law as embodied by an electrical current flowing through a circuit that includes an instrument string and one or more frets, and the measurement of a voltage across a resistance in that circuit. Applying Ohm's Law allows for calculation of the current flow from a known resistance the measured voltage. In the case of the stringed instrument and as shown in
Extending these principles to multi-stringed, multi-fretted, instruments can be thought of as treating the strings and fret pairs as an array of sensors. The strings are sequentially driven with current and fret pairs are sequentially selected for voltage measurements by an array of multiplexers. These measurements are sampled by an analog-to-digital converter (ADC) to generate information that is used to determine when a particular fret pair is bridged. The string current drive sequencing, fret pair multiplexing, ADC sampling, and post processing is performed by an embedded microcontroller.
Note that an additional string referred to as the “shorting string” 614 is shown in
Also, note the special case of “Fret 0” also called the “NULL Fret”. The connection to the zeroth fret multiplexer address allows for measurement of the NULL condition, comparing the ground reference at the nut end to itself. This information can be used to determine the voltage offset error of differential instrumentation amplifier 610. This may be a critical design consideration for some implementations due to the large gains required to detect small amounts of current (e.g., 100-150 mA) through the very low resistance of the instrument's strings (e.g., tens of milliohms per inch 2-3 ohms per 24-25 inches 80-140). Depending on the implementation, the NULL sample can be sent through a null offset difference amplifier stage or it can simply be sent through the ADC for correction in the microcontroller firmware.
An example of a fret board scanning sequence for an implementation of a fret scanning system enabled by the present disclosure is represented by the timing diagram of
The period of time during which any given string is being driven is referred to as the string period (e.g., 702). The period of time during which the strings are sequentially activated for a given pair of frets is referred to as the fret period (e.g., 704). Activation of the strings for each successive pair of frets continues until the fret period for fret 0 (the NULL fret) has completed, after which the process begins again at fret n. The process of sequencing through all frets and strings of the instrument is referred to as a full board scan. During each string period, a signal for a corresponding string/fret pair combination is amplified (e.g., by differential amplifier 606) for ADC conversion and analysis by the microcontroller firmware (e.g., 612).
According to some implementations, a secondary drive of each string is provided to allow for detection of open strings that are being touched but not fretted. This “touch scan” might be performed, for example, once for each full bridge scan after the fret period for the NULL fret and before the next full bridge scan begins. During the touch scan, each string is connected to a current source and is left floating without providing a path to ground to sink the current. This results in a small amount of charge building up on the string. After the charge is applied to the string, an ADC captures the string's voltage level. If the string is being touched, this level will register lower than the level for a string which is being neither fretted nor touched.
As will be appreciated, this touch scan may be implemented using at least some of the same hardware as that used to implement the fret scanning described above. For example, in the implementation depicted in
Depending on the implementation, careful consideration may be required regarding the design of the differential instrumentation amplifier (e.g., amplifier 610). For implementations in which small currents are driven through the very low resistance of the instrument's strings, a large amplifier gain is required to condition the signal (which in some cases may be fractions of a millivolt) into a voltage that can be read by the ADC. And due to the large gains involved (e.g., 200-400), the differential amplifier preferably has a sufficiently high bandwidth and a sufficiently fast slew rate to stabilize the signal and allow ample time for the ADC to capture its measurement before the next string period. Off-the-shelf operational amplifiers may be used as long as the gain-bandwidth ratio, input offset voltage, and common-mode rejection ratio ensure the desired level of performance and noise immunity. In addition, it is preferable that the amplifier inputs present a very high impedance to ensure that no appreciable amount of current directed down the instrument strings flows into the measurement points. Examples of the analog behavior of a fret scanning system at the output of the differential amplifier is represented for two different scenarios in
The waveform shown in
Also note that the fret period for fret x−1 (as well as the subsequent non-depicted fret periods) shows a data pulse for string 2 (e.g., pulse 804). As represented in the figure, these subsequent pulses are typically larger than the pulse for the leading fret due to the resistance of the shorting string which is in parallel with the resistance between the bridged frets (x and x−1) but carrying all of the current for subsequent fret pairs.
On the other hand, the trailing but invalid pulses are much larger (as represented by pulses 854 captured during the fret period for fret x−1). Despite the multiple strings fretted, these invalid pulses are nearly as large in amplitude as the invalid pulses in the case of the single fretted string (e.g., pulse 804). This is, again, due to the fact that these measurements are the result of a single current path through the shorting string. Variations in pulse amplitude are further exacerbated by differences in resistance between different instrument strings and differences in the distance between successive frets. Given the wide range of variation in amplitude of the pulses associated with the leading fret and subsequent invalid pulses, careful attention to the application of a fret hit threshold must be paid in order to avoid registering a hit on the flat halftone of an actual fretted note.
As will be appreciated, the foregoing constraints should be considered when choosing amplifier gains and determining the amount of current to drive down the strings. Simply choosing higher gain or higher drive current may not improve overall system performance in that higher gains may tax the capabilities of the amplifier, while higher current will increase power consumption and may inject higher noise levels into the ground reference.
Another consideration that should be taken into account is the fact that the relatively strong current drive applied to the strings may be detected by the instrument's conventional magnetic pickups. Therefore, for some implementation, the strings are driven at a frequency that is out of the audio band in order to prevent noise from being generated and amplified by analog audio equipment. For example, in the context of the scanning process described above, the frequency of the string drive is the inverse of the scanning fret period and the duty cycle of the string drive is 1/m, where m is the number of strings on the instrument. In a typical six-string guitar application, in order to keep the periodic string drive frequency at 20 Khz, the individual string drive period would need to be the reciprocal of 20 KHz*6 (strings)=120 KHz, which is approximately 8.33 microseconds. These factors should be taken into consideration when evaluating microcontroller and ADC capabilities. In addition, jitter due to firmware control of the string drive should be mitigated in order to prevent modulated frequencies from being emitted by the driven strings and picked up by the instrument's magnetic pickups.
The mechanical integration of fret scanning systems enabled by the present disclosure may vary considerably and will be dictated, at least in part, by the type of stringed instrument. According to a particular class of implementations, the array of multiplexers may be distributed along a slim PCBA embedded in the neck of the instrument with a cable connected to another PCBA installed elsewhere in the body of the instrument (e.g., PCBA 406 of
Electrical connections to the frets may be made with wires, studs, or posts embedded in the fingerboard of the instrument that provide a conductive path from the conductive frets to circuitry on the PCBA embedded in the neck of the instrument. Referring again to the implementation illustrated in
As discussed above, implementations are contemplated in which the fret scanning system includes a microcontroller running dedicated firmware. As will be appreciated, such a design can result in a faster time-to-market as well as provide flexibility for including improvements or additional features. Algorithms for controlling operation of such an implementation will now be described with reference to the flowcharts of
Referring to
Enabling the string current driver for the selected string for the implementation of
The input to the ADC is then sampled (1114). This typically takes several clock cycles and generates an interrupt when complete. The ADC sampled value is then assigned to the appropriate variable (1116). For example, if the fret value>0 (i.e., the currently selected fret is one of the n frets of the instrument), the sampled value is assigned to the variable fretSample. If the fret value=0 (i.e., fret 0 or the NULL fret is selected), the sampled valued is assigned to the variable nullSample. If the fret value=−1 (i.e., touch sensing is enabled), the sampled value is assigned to the variable touchSample.
The sampled value is then compared to the appropriate threshold (1118) to determine whether a fret hit has been detected (1120). If the current fret value>0, the variable fretSample is compared to the fret hit threshold, and a fret hit is registered for the string by recording the note, e.g., the fret value of the current fret, and the sampled value generated by the ADC (i.e., fretS ample). Note that this is only done if a fret hit has not already been registered for the current string during the current full board scan. If the current fret value=−1, the variable touchSample is compared to the touch threshold. This is a “low going” threshold in that a hit is registered if the value of touchS ample falls below the threshold. If a touch is detected, a fret hit is registered for the current string by recording a −1. Note again that this is only done if a fret hit has not already been registered for the current string during the current full board scan.
According to some implementations, fret hit thresholds may vary and even be dynamic. For example, different thresholds might be used depending on the conductivity of the string (e.g., the high and low E strings on a guitar may have significantly different conductivity) or the distance between the frets in a fret pair (e.g., the distance between fret n and fret n−1 is typically much small than the distance between fret 0 and fret 1). In another example, a fret hit threshold might vary depending on the number of strings that are simultaneously fretted at the same fret (see, for example, the difference in amplitude illustrated in
If the current fret value=−2 (1106) (designating the fret hit collection period), each fret hit detected during the current full board scan is compared with the fret hit data recorded for the previous scan (1122). If a fret hit for the current scan is equal to the values recorded in the previous scan (1124), a de-bounce counter for that fret hit is incremented (1126). If not, the counter is reset (1128). If the counter exceeds a predefined and tunable threshold (1130), the fret hit is assigned to a musical instrument digital interface (MIDI) note semaphore (1132) which is ultimately communicated to the main processing loop for further processing as described below. The fret hit is then assigned to the previous fret hit for use with the next full board scan (1134). Note that once the de-bounce counter exceeds the threshold, the counter is frozen at that value until the fret hit changes from its previous value. This prevents the counter from overflowing and causing errors.
After 1120, the current string value is incremented (1136). If the current string value is greater than the final string (1138), e.g., >m, the current string value is reset to the first string and the current fret is decremented (1140). If decrementing the current fret results in the current fret value<−2, (1142), a scan complete semaphore is communicated to the main processing loop (1144), and the fret value is reset to its initial value (1102), e.g., fret n. Otherwise, the process returns to 1106.
According to a particular implementation, the main processing loop receives and processes the results of the board scans and includes non-timing-critical functionality such as, for example, final commitment of fret hits to potential notes that are passed on to other systems, e.g., a synthesizer or a pitch detection system, for further processing. The main processing loop may be implemented in the firmware of a microcontroller as discussed above (e.g., as represented by post processing 612 of
The main processing loop waits in an idle state (1202) until a scan complete semaphore is received (1204) e.g., from the full board scan loop illustrated in
If the note has changed (1210) and is a touch note (1212), e.g., fret value=−1, a MIDI OFF message is generated for the string with a note value or velocity of 0 to mute the string (1216). In either case, the current note for the string is then assigned to the previous note variable for use with the results of the next scan (1218).
All fretted notes, i.e., reported notes for fret values>0, are retained for use in a dithering correction algorithm (1220). A MIDI transmission is generated for any new notes (1222), and the scan complete semaphore is reset (1224).
As alluded to above, at least some of the processing associated with the main processing loop depicted in
The present disclosure describes a variety of enhancements for use with fret scanning techniques that improve the robustness of fret hit detection. An example of one class of enhancements relating to the de-bouncing of fret hits is described above. Another class of enhancements relates to an issue that arises for the analog data generated by a fret scanning system in which the voltage level for the leading fret of a bridged fret pair diminishes slowly and eventually drops below the fret hit threshold. This often occurs in the case of complex, multi-string chords, particularly barre chords. If left uncorrected, the effect of this phenomenon is to drop the note reported for that string to the next flat note down the fretboard. This is referred to herein as “note dithering.” According to some implementations, a dithering correction algorithm is provided to address this issue.
When a sampled ADC value exceeds the fret hit threshold, two conditions are checked to determine whether to enter the dithering correction loop. First, the number of simultaneously fretted strings (e.g., as determined in the main processing loop from the last completed full board scan) must be greater than a tunable parameter, e.g., two or three strings (1304). Second, the current sampled ADC value must correspond to a string and fret combination for which a fret hit was recorded in the previous full board scan (1306). If these conditions are met, the dithering correction loop is entered.
If the sampled value for the fret hit has decreased relative to the sampled value for the previous fret hit by less than another tunable parameter referred to as the “dithering gap” (1308), a dither counter is incremented and the stored sampled value for the fret hit is updated to the current sampled value for use in the next scan (1310). Otherwise, the dither counter is decremented with a floor of zero (1312). If the dither count (i.e., the number of consecutive scans showing a small downward trend in sample amplitude) exceeds a “dither threshold” count (another tunable parameter) (1314) and has not yet reached a “dither timeout” count (another tunable parameter) (1316), a “locking” condition is entered (1318) in which the threshold comparison for the sampled value is bypassed in the next scan and the note for the current string/fret combination continues to be reported as a valid fret hit even if the sampled ADC value trickles below the fret hit threshold.
Once in this locked state, if the sampled ADC value does not recover before reaching the “dither timeout” count, the dither counter is reset and the lock is released (1320). This allows the flat note to become the valid fret hit in the next scan. However, in practice, this generally will only occur on an actual intended slow slide down to the flat note by the instrument's player. Proper tuning of the three parameters described above will enable accurate note detection across a wide range of playing styles.
According to some implementations, algorithms for correcting note dithering may be based on or enhanced by observation of the behavior of the sampled ADC value for a trailing fret. That is, as illustrated in
Techniques for de-bouncing fret hits and for correcting note dithering as described herein may be used separately or in combination to improve the robustness of fret hit detection and reduce the likelihood that a fret scanning system registers or reports erroneous notes. Additional techniques may be used in conjunction with one or both of these classes of techniques to further improve fret hit detection and note reporting.
For example, de-bouncing may be applied differently for different types of note transitions. That is, in a symmetrical case, the de-bounce threshold is the same number of consecutive scans for any note transition possible on a given string. These transitions include Open String→Fret, Fret→Fret, and Fret→Open String. But since we have information on the note registered for each string in the previous scan, we can take an asymmetrical approach in which we apply different thresholds for the different types of transitions. For example, the case of an apparent Fret→Fret transition in which a note appears to have transitioned exactly one half tone lower (i.e., one fret) resembles the kind of error that note dithering causes. So, in this case (and possibly in addition to the counter-dithering algorithm described above), a more stringent approach to de-bounce can be applied. That is, the de-bounce threshold can be set higher (e.g., 10 scans instead of 5) as a countermeasure to passing along an erroneous note when dithering is occurring. As in the case of the dithering algorithm, this more stringent de-bounce qualifier could be conditional on a minimum number of simultaneous fretted strings and other known triggers for the dithering condition so as to not detract from the response/performance of the system when dithering is unlikely to be occurring.
According to some implementations, a fret scanning system can generate confidence scores for each fret hit that may be included with the MIDI messages that are transmitted to external systems such as, for example, a pitch detection system. For example, when detecting fret hits, multiple threshold levels could be used to assign a confidence score to each fret hit. This information could be provided to the pitch detection algorithm which could intervene before an erroneous note would actually get committed. For instance, if a voltage level as measured by the ADC was significantly larger than the minimum threshold for a hit, and perhaps higher than a second level threshold, that note would be transmitted to the pitch detection algorithm with a high confidence, where borderline threshold crossings would be sent with lower confidence. Depending on the received confidence level, the pitch detection could hold off committing a note pending more stringent pitch detection certainty. The response of the system would be lower for that moment in time, but at least an erroneous note would not get played.
As mentioned above, the output of a fret scanning system may be used by a pitch detection algorithm to more quickly determine pitch than is typically possible using the output of a pickup alone. One example of a pitch detection algorithm enabled by the present disclosure may be implemented in the StringPort from Keith McMillen Instruments, an implementation of which is described in U.S. Pat. No. 8,581,086 incorporated by reference above. The StringPort provides real-time musical pitch information derived from the live audio input of each string of an instrument.
StringPort 1400 receives polyphonic string audio through an industry standard Din 13 connector 1402. The audio signals are generated by a pickup system (not shown) on the stringed instrument that has one or more dedicated transducers for each string such as, for example, described above with reference to
StringPort 1400 samples the polyphonic string signals with high quality Delta Sigma ADCs. Each audio signal passes through a digitally controlled gain stage 1406, is filtered 1408, and then converted to 24-bit data by ADC 1410 at either a 44.1 KHz or 48 kHz sample rate. A central processing unit (CPU) 1412 or the equivalent (e.g., any type of conventional processor or controller, custom integrated circuits, etc.) extracts and formats the serial digital audio streams from the ADCs and transmits them to an interface 1414 which may be, for example, a wired interface (e.g., a Universal Serial Bus (USB) connector) or a wireless interface (e.g., a Bluetooth transceiver). The output audio signals are then transmitted to a connected system, e.g., a synthesizer, a computer, etc. CPU 1412 is also configured to perform a pitch detection algorithm that employs string audio samples and fret scanning data to determine the pitch associated with each string. A specific implementation of such a pitch detection algorithm is described below with reference to
Given that a note performance on a stringed instrument typically includes a quick attack (actuated by the plucking or picking of a string) followed by the residual free vibration of the string, it is desirable that a pitch detection algorithm both responds quickly to the actuation with an accurate estimate of the note performed, and also tracks the free vibration of the string. The former of these two tasks is referred to herein as trigger pitch detection; the latter as continuous pitch analysis.
According to a particular class of implementations, the onset of a note performance for each string on a stringed instrument is determined by a trigger detection algorithm that provides a triggers to the overall pitch detection algorithm to indicate that a trigger pitch should be determined. According to some implementations, the triggers are generated from the string signals using an event capture and classification functionality that employs a time-domain analysis that marks each inflection point (e.g., local maxima and minima) in a string signal waveform, and classifies the events using a trained neural net that can accurately determine when an event begins and the event type. For further information regarding this event classification technique, please refer to U.S. Patent No. 8,581,086, incorporated herein by reference above.
The overall pitch detection algorithm employs the continuous tracking of pitch, as well as information from a fret scanning system that provides an estimate of the current fret depressed on the neck of the stringed instrument. The overall pitch detection algorithm also receives sampling messages upon which it reports the current continuous pitch estimate as a discrete message or as a signal. It should be noted that, while the pitch detection algorithms described herein may be employed with pickups and fret scanning systems enabled by the present disclosure, implementations are contemplated in which other types of pickups and fret scanning systems may be used.
The overall pitch detection algorithm employs a hybrid model of computation involving both synchronous discrete time signals as well as asynchronous discrete events. The discrete time signals employ fixed-sized sample blocks, the size of which can be set globally. The processing of a block of samples from each input (each representing a string) produces a block of samples for each output. This portion of the overall pitch detection algorithm is referred to herein as the digital signal processing (DSP) process.
The asynchronous part of the overall algorithm involves the reception of message events that schedule the execution of event-handling routines. The order of execution of these routines is determined by an event scheduler. This portion of the overall pitch detection algorithm is referred to herein as the message handling process. It should be noted that, despite the hybrid model described herein, the synchronous and asynchronous parts of the algorithm could be integrated on a homogeneous platform such as, for example, Max/MSP, a visual programming language for music and multimedia developed and maintained by Cycling '74 of San Francisco, Calif.
The overall pitch detection algorithm aggregates blocks of input samples for a given instrument string into a buffer called an input window. The input samples are the digital representations of the state of the corresponding instrument string, e.g., the 24-bit data generated by ADC 1410 of the StringPort of
According to a specific implementation illustrated in
The DSP process may employ two different methods to estimate the trigger pitch. These methods can also be combined in several ways; the fret method which uses information from a fret scanner, and autocorrelative analysis. Typically, the information from a fret scanner provides a good estimate of the current fret, and thus the current pitch that would result from actuating the string, sufficiently prior to the reception of the trigger message. However, if the fret information is not currently available or reliable (1508), the trigger pitch detection algorithm waits until the analysis hop when the fret information is available/reliable (1510). By contrast, autocorrelative analysis (1514) waits for a significant segment of the samples generated by the onset of the note performance to appear in the input window (1512). Thus, when the fret information can be used reliably, it makes sense to do so, with autocorrelative analysis being performed as a fallback.
Once the fret information is determined to be available/reliable, and/or an autocorrelative analysis provides a pitch (1516), further information is obtained about the amplitude characteristics of samples in the input window (1518). A trigger pitch message is generated that includes the estimated pitch along with other characteristics of the input window (1520). This trigger pitch message is scheduled for asynchronous transmission as an event (1522). The trigger pitch detection algorithm then enters a mode in which it waits the duration of a specified de-bounce time before accepting further trigger messages (1524).
A particular implementation of the overall algorithm for continuous pitch estimation is depicted in
When identifying the fundamental frequency of a signal using spectral analysis it may be difficult to identify the correct octave. A spectral sieve can identify harmonics that are related as whole number multiples, i.e., the fundamental or 1st harmonic, the 2nd harmonic (2×fundamental), the 3rd harmonic (3×fundamental), etc., but a rapid decision by the sieve can produce results identifying other harmonics as the fundamental.
Referring now to
If spectral analysis 1602 fails to identify a harmonic series within a programmable time, fret octave correction 1606 will send the pitch estimate derived from the fretted note to historical correction 1608. Historical correction 1608 looks for previous pitches and trends to smooth over brief inconsistencies in reported pitch before sending the pitch estimate out as a smoothed fundamental. Awareness of total power in historical correction 1608 also provides information about the string. Changes in pitch are often associated with changes in the string's power. Also the amount of smoothing in historical correction 1608 can be increased as the power of the string lessens and noise may start to cause variations in pitch data. Finally there is known small signal level where the pitch is not considered reliable at which point historical correction 1608 holds the last known reliable pitch estimate.
A more detailed illustration of spectral analysis 1602 is shown in
During the beginning of a note performance, when a note is picked or plucked, the pitch information from the continuous pitch analysis can be distorted and ambiguous because of the transients from the actuation of the string and/or an insufficient number of periods of the waveform to get a clear estimate. It is for this reason that the trigger pitch estimate is produced at the beginning of a note performance, while the continuous pitch becomes accurate at some point after the trigger is detected. The continuous pitch analysis also typically becomes inaccurate when the amplitude of the vibration of the string drops below a level significant enough to perform the analysis amidst the noise. And as will be appreciated, when the string is not vibrating at all there is no meaningful notion of continuous pitch.
According to a particular implementation, a state machine and gating mechanism are used to track the different conditions under which pitch is reported. After a trigger is detected, pitch is reported as the trigger pitch rather than the continuous pitch coming from analysis. After a delay, and if the continuous pitch data is consistent, pitch is reported from the continuous pitch analysis. When the amplitude level falls below a threshold and the variation in continuous pitch increases above a certain amount (e.g., as during the end of a note decay), the last good pitch is simply held and reported. Finally, when amplitude falls below a lower threshold, indicating the note performance has ended, no pitch is no longer reported. It should be noted that, although these modes are described in a particular, prototypical sequence, they could appear for various reasons in other sequences.
As discussed above, a fret scanning technique may be used in conjunction with a pitch analyzer that uses the pitch estimate generated from the fret data to quickly determine pitch by examining the harmonics of a plucked note. This enables determination of pitch much more quickly than using a pitch analyzer alone, e.g., as quickly as 5 to 15 milliseconds depending on the string's pitch. Even if a musician frets a note, plucks the string, and then bends the string, continuously changing its pitch, such an approach can remain effective.
However there is a common guitar technique in which a musician pre-bends the string parallel to the fingerboard before plucking as illustrated in
According to a particular class of implementations, a string displacement sensor is provided that senses the extent of the sideways bend of the string before the string is plucked. The sensor employs an inductor the inductance of which changes in a manner that is representative of the bend of the string. Three views (Views A, B, and C) of a particular implementation of such a string displacement sensor are illustrated in
In the depicted example, a coil 1802 is integrated with a saddle component 1800 that also serves as a pickup. The pickup functionality may be implemented using a piezoelectric element 1804 in a manner similar to saddle component 100 of
As the string associated with saddle component 1800 is bent in either direction (as illustrated by arrow 1812), the insertion depth of core component 1808 in coil 1802 changes from its median position. And as the proportion of air to metal in the core of coil 1802 changes, its inductance changes correspondingly. Coil 1802 may be implemented, for example, using about 430 turns of 0.55φ2UEW enameled copper wire.
According to a particular implementation, the variable inductance coil is part of an LC oscillator 1900 as depicted in the circuit diagram of
The bend information generated by saddle component 1800 can be used to inform a pitch detection system (e.g., as described herein) about a string's status in multiple ways. For example, it can be used to indicate a bend “go/no-go” condition that can be used to inhibit a report of the string status based solely on the fret data. That is, when a string is bent, the fret data would otherwise report a value that would be flat relative to the actual state of the bent string. So, instead of using the fret data from a fret scanning system to generate a pitch estimate, the pitch detection system might wait until the actual frequency can be determined by other means, e.g., using continuous pitch analysis based on a pickup signal. In another example, bend information can be used to provide a variable degree of positive offset (based on the degree of bend) to the value reported by the fret scanning system. That is, the pitch estimate derived from the fret data would modified using the bend information to account for the increased tension on the string. In some cases, such a modified estimate could be used instead of the pitch estimate derived from the string signal, e.g., where the part of the overall pitch detection algorithm that employs continuous pitch analysis doesn't resolve to a reliable value quickly enough.
The vertical position of the saddle component's tone arm (i.e., in the axis perpendicular to the face of the instrument) can change as a result of the tension of the instrument string. This deflection is potentially problematic with regard to the alignment of the core extending from the tone arm into the coil. Therefore, according to some implementations and as shown in
It should be noted that any computer program instructions or code with which functionality described herein may be implemented may correspond to any of a wide variety of programming languages, software tools, data formats, or codecs, may be stored in any type of volatile or nonvolatile, non-transitory computer-readable storage medium or memory device, and may be executed according to a variety of computing models without departing from the scope of the invention. For some implementations, such instructions or code may be implemented in software or firmware associated with embedded devices such as, for example, processors, microcontrollers, or the like. Implementations are also contemplated in which at least some functionality may be implemented using programmable devices, application-specific integrated circuits, or the like. Reference to specific modes of implementing certain functionality should therefore not be used to limit the scope of this disclosure.
It will be understood by those skilled in the art that changes in the form and details of the implementations described herein may be made without departing from the scope of this disclosure. For example, it should be noted that at least some of the techniques described herein may be employed with instruments that do not have frets. That is, for example, fretting data representing fretting hand positions or string lengths (rather than fret hits as described above) could be reported for fretless instruments for use by pitch detection systems as described herein with reference to
Finally, although various advantages, aspects, and objects have been described with reference to various implementations, the scope of this disclosure should not be limited by reference to such advantages, aspects, and objects. Rather, the scope of this disclosure should be determined with reference to the appended claims.
The present application is a non-provisional and claims priority under 35 U.S.C. 119(e) to U.S. Provisional Patent Application No. 62/244,590 entitled Guitar Scanner and Pickup to Improve Synthesizer Response filed Oct. 21, 2015 (Attorney Docket No. KSMOP009P), the entire disclosure of which is incorporated herein by reference for all purposes.
Number | Date | Country | |
---|---|---|---|
62244590 | Oct 2015 | US |