JP3945795B2 - タイムストレッチ装置 - Google Patents
タイムストレッチ装置 Download PDFInfo
- Publication number
- JP3945795B2 JP3945795B2 JP16693398A JP16693398A JP3945795B2 JP 3945795 B2 JP3945795 B2 JP 3945795B2 JP 16693398 A JP16693398 A JP 16693398A JP 16693398 A JP16693398 A JP 16693398A JP 3945795 B2 JP3945795 B2 JP 3945795B2
- Authority
- JP
- Japan
- Prior art keywords
- input signal
- data
- octave
- band
- time
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Expired - Fee Related
Links
Images
Landscapes
- Electrophonic Musical Instruments (AREA)
Description
【発明の属する技術分野】
本発明は、フレーズ等の一連の音の列に対してそのテンポ等をピッチとは独立に変えることができるタイムストレッチ装置に関する。
かかるタイムストレッチ装置は電子楽器などに搭載して利用することができる。
【0002】
ある自然なひと区切りのメロディ・ラインなどの一連の音列をフレーズ(楽句、楽節などともいう)と称しているが、電子楽器において、あるフレーズのテンポを変化させるには、最も単純な方法では、そのフレーズのデータをメモリに蓄えておいてその読出し速度を変化させることで実現できる。しかし、この方法では、テンポ(すなわち読出し速度)を変化させると、それに伴ってピッチも変化してしまう。
【0003】
そこで、ピッチを変えずにテンポを変える方法が幾つか提案されており、例えば無音区間を検出しその区間の長さを調整してピッチを変えずにテンポを変化させる方法、あるいは台形窓を使ってフレーズから波形を切り出す方法などがある。
【0004】
ところが、無音区間による方法では、無音区間がない若しくは少ないフレーズでは、調整に限界がある。また台形窓による方法では、台形窓のエンベロープが雑音として聴こえてしまい、十分満足できるものとは言えない。
【0005】
さらに、入力信号を複数の帯域に分割した後に、その各帯域についてその振幅と位相変化量(ピッチ)を検出し、その振幅データを用いてテンポ変化を実現し、位相変化量を調節することによりピッチ変化を実現する方法がある。
【0006】
図13にはこの方法によりタイムストレッチ(時間の圧縮/伸張、すなわちテンポの調整に相当)を行う装置の構成例が示される。図示するように、入力信号を、通過帯域のそれぞれ異なる例えば100個の帯域フィルタを用いて、図14に示すような100の帯域(バンド)Band0〜Band99に分割し、その分割した各帯域の信号についてその振幅成分と周波数成分(ピッチ成分)とを抽出し、それら各帯域の振幅成分の時間変化の速度と周波数成分の時間変化の速度とをテンポ変化指示量に応じてそれぞれ変えることにより、これら振幅成分と周波数成分との時間軸をそれぞれ例えば図15に示すように圧縮/伸張し、その後に各帯域の振幅成分と周波数成分を合成することで、元の入力信号をタイムストレッチして出力するものである。ここで、図15(A)は元の信号(振幅成分と周波数成分)の波形、図15(B)は時間軸を伸張した後の信号(振幅成分と周波数成分)の波形である。
【0007】
この方法の原理は、各帯域の信号は、帯域フィルタの数を十分多くすることで、帯域幅(よって帯域内での周波数変化幅)を十分小さくでき、よって時間軸を圧縮/伸張しても周波数成分は殆ど変化がないと見なすことができるので、振幅成分をその振幅値を変えずに時間軸を圧縮/伸張してもピッチが変わらないというものである。
【0008】
【発明が解決しようとする課題】
従来の帯域分割によるタイムストレッチ方法では、リズム音などのような急峻な変化(アタック部分など)がある楽音信号が入力されると、用いているフィルタの影響で、そのアタック部分の前部分にプリエコーと呼ばれるノイズが発生して、アタック部分が鈍った音になってしまい、音楽性に欠けるものになってしまうという問題点がある。これは、帯域を分割するフィルタのタップ数(フィルタの次数)が多いと生じる現象であり、タップ数を減らすことで、この鈍り具合を低減することができる。
【0009】
一方、フィルタはそのタップ数を減らせば減らすほど、その帯域幅が広くなってしまう性質を持っており、結局、タップ数を減らすと入力信号を帯域分割する分割数を少なくせざるを得なくなる。このように分割数が少なくなった場合、倍音構造が重要な音(主にメロディに使用される音)では、その倍音構造がきちんと再現されなくなり、やはり音楽性に欠けたものとなってしまう。
【0010】
このように、従来の帯域分割によるタイムストレッチ方法では、フィルタのタップ数とそれらフィルタによる帯域分割数とは、タイムストレッチした楽音の音楽性を保つという観点からはトレードオフの関係にあり、リズム系の楽音とメロディ系の楽音の何れをも音楽的に満足できるようにタイムストレッチすることは容易ではなかった。
【0011】
本発明はかかる問題点に鑑みてなされたものであり、リズム系やメロディ系などのような楽音の種々のタイプに対応して、音楽性を損なうことなく入力信号をタイムストレッチできるようにすることを目的とする。
【0012】
【課題を解決するための手段】
上述の課題を解決するために、本発明に係るタイムストレッチ装置は、入力信号をタイムストレッチする量を指示する指示手段と、入力信号のタイプを指示するタイプ指示手段と、入力信号をフィルタを用いて複数の帯域に分割し各帯域の信号を振幅成分と周波数成分に変換してその時間変化の速度(例えばテンポなど)を該指示手段で指示した指示量に基づき変えた後に再合成することで入力信号をタイムストレッチするタイムストレッチ手段と、該タイムストレッチ手段での帯域の分割数と該フィルタの使用する特性を該タイプ指示手段で指示した入力信号のタイプに応じて変更する変更手段とを備える。
【0013】
【作用】
タイプ指定手段で入力信号のタイプを指定することで、変更手段は、指定されたタイプに応じて、タイムストレッチ手段で用いる帯域の分割数のフィルタの特性、例えばタップ数を変化させる。例えば、リズム音系の入力信号であることが指定されたときにはタップ数が少なくなるようにし、メロディ音系の入力信号であることが指定されたときには分割数が多くなるように制御する。このようにすれば、リズム音系の入力信号もそのアタック部分などが鈍ることがなくなり、またメロディ音系の入力信号でもその倍音構造がきちんと再現されるようになる。これにより、いずれのタイプの入力信号に対しても音楽性を損なうことなくタイムストレッチすることが可能となる。
【0014】
【発明の実施の形態】
以下、図面を参照して本発明の実施の形態を説明する。
図1には本発明に係る一実施例としてのタイムストレッチ装置の構成が示される。かかるタイムストレッチ装置は例えばサンプラや電子楽器などに搭載することができる。図1において、CPU1は装置の全体的な制御を司る中央処理装置、ROM2は制御プログラムや各種データのテーブル等を格納しているリード・オンリー・メモリ、RAM3は作業用のメモリエリアなどとして利用されるランダム・アクセス・メモリ、操作子群4は各種スイッチ類からなるもの、表示器5はパラメータの選択等の際にパラメータを画面表示するなどに用いる液晶表示器である。ハードディスク駆動装置6、CD−ROM駆動装置7は外部記憶装置をなすものである。また、A/D変換器8はアナログ入力信号をディジタル信号に変換して入力するためのもの、D/A変換器9は装置内で処理したディジタル信号をアナログ出力信号に変換して出力するためのものである。
【0015】
ここで、この波形変換装置において、分析にかける入力信号(入力データ)は一連の音の列からなるフレーズの波形を逐次にサンプリングしたサンプル値(振幅値)である。ここではこの入力データの元来のサンプリング周波数(あるいはシステムのサンプリング周波数ともいう)をfsoとする。さらに、この入力データはA/D変換器8や外部記憶装置(ハードディスク駆動装置6、CD−ROM駆動装置7)から入力されてRAM3に転送される。この入力データはRAM3から一旦読み出されてCPU1の制御下に分析され、その分析されたデータはRAM3に再び格納され、その後にハードディスク駆動装置6などに転送される。
【0016】
図2には、表示器5の画面に表示される入力信号のタイプ設定画面が示される。図示するように、入力信号する楽音のタイプとして、リズム音系の「リズミック」とメロディ音系の「メロディック」の二種類のうちの何れかをユーザがカーソルキー等の操作子を用いて指定することが可能である。この実施例装置では、入力信号タイプ指示フラグTYPEを有しており、「リズミック」が指定されたときにはこの入力信号タイプ指示フラグTYPEが「1」に、「メロディック」が指定された場合には「0」に設定される。また、「リズミック」が指定されたときには、後述する変数であるオクターブ内分割数Mと間引き数DECIがそれぞれ「4」に設定される。一方、「メロディック」が指定されたときにはそれら2つの変数は「8」に設定される。
【0017】
以下、図面を参照して実施例装置の動作を説明する。
まず、入力信号の分析処理の手順を図4、図5に示すフローチャートを用いて説明する。この入力信号の分析処理は、入力信号のエンベロープを検出して保存するとともに入力信号に急峻な部分(例えばアタック部分)がなくなるようにその振幅を平坦化し、その後に、平坦化した入力信号を複数の帯域に分割して、各帯域の信号をそれぞれその振幅成分と周波数成分に変換するものである。
【0018】
図3にはこの実施例における帯域分割の概念が示される。ここで、システムのサンプリング周波数をfsoとすると、入力信号の周波数は角周波数ωで表示されており、角周波数ω=πは周波数換算でfso/2に相当している。ここで、ωがπ〜π/2の区間が第1オクターブ、π/2〜π/4の区間が第2オクターブ、π/4〜π/8の区間が第3オクターブ・・・というようにして、第10オクターブまでオクターブ単位で分割されている。ここではこれらの各帯域をオクターブ帯域と称することにする。いずれの番号のオクターブ帯域であるかはオクターブ数カウンタoctによって識別される。さらに各オクターブ帯域のなかは、オクターブ内分割数Mで等分に分割されており、これら分割された各帯域(以下、オクターブ内分割帯域と称することにする)はオクターブ内分割数カウンタmによって識別される。ここで、オクターブ内分割数Mは、本実施例では前述したとおり、入力信号のタイプが「リズミック」の場合には「4」、「メロディック」の場合には「8」となる。図3に示した例は前者の「リズミック」の場合のものである。
【0019】
分析処理においては、まず、入力信号in(i)のエンベロープ検出とその平坦化を行う(ステップS1)。図6にはこのエンベロープ検出および平坦化の詳細な手順が示される。図6のエンベロープ検出および平坦化の処理において、iは入力信号(例えば図10に示すもの)のサンプル値の時間軸上での順序を示すカウンタであり、curはエンベロープ検出処理を行うためのカレント(現)振幅値である。また、env(i)は入力信号in(i)から検出されたエンベロープ(包絡線)値である。さらにRELEASはリリースパラメータ(リリース係数)、ATTACKはアタックパラメータ(アタック係数)、LENはデータ長(分析対象のフレーズの長さ)である。
【0020】
図6において、まず、カウンタi=0、カレント振幅値cur=0に設定し(ステップS21)、このカレント振幅値curを入力信号in(i)の絶対値と比較する。すなわち、
|in(i)|>cur
かを判断する。入力信号in(i)の絶対値のほうがカレント振幅値curよりも大きい場合には、現在の入力信号のエンベロープ部分は急峻に立ち上がっているからアタック部分のものと推定することができ、この場合、カレント振幅値curを以下の計算式
cur=cur+(|in(i)|−cur)*ATTACK
(但し、「*」の印は掛け算を表すものとする。以下同じ)
により、アタック係数ATTACKに従って増加するように更新する(ステップS24)。
【0021】
一方、入力信号in(i)の絶対値がカレント振幅値cur以下の場合には、現在の入力信号のエンベロープ部分は緩やかに立ち下がっているからリリース部分のものと推定することができ、この場合、カレント振幅値curを以下の計算式
cur=cur+(|in(i)|−cur)*RELEASE
により、リリース係数RELEASEに従って減少するように更新する(ステップS24)。
なお、このアタック係数ATTACKおよびリリース係数RELEASEは予め別のモードにおいてユーザにより設定されているものである。
【0022】
この後、更新したカレント振幅値curを入力信号in(i)のエンベロープ値env(i)とし(ステップS25)、バッファ(メモリ)に格納する。すなわち、
env(i)=cur
とする。
【0023】
次いで、入力信号in(i)の平坦化を行う。これは、入力信号in(i)をカレント振幅値cur(したがってエンベロープ値)で割算することで実現する(ステップS27)。これにより、原理的には入力信号in(i)は「1」となるが、実際にはカレント振幅値curは正確なエンベロープの値を必ずしも表していないため「1」に近い値となる。なお、カレント振幅値curが0と判定された場合には(ステップS26)、ステップS27の除算はできないので、この場合にはステップS27を飛ばす。
【0024】
次いで、入力信号in(i)の時間軸上の位置を更新するために、カウンタiを一つインクリメントする(ステップS28)。すなわち、
i=i+1
とし、この更新したカウンタiがデータ長LENを超えるまで、同じ処理を繰り返す(ステップS29)。これによりエンベロープ値格納用のバッファに1フレーズ分の入力信号のエンベロープを格納することができる。
【0025】
ここで、図10は上述のエンベロープ検出処理により入力信号の波形から抽出したエンベロープを示すものであり、図11はエンベロープを抽出した後の入力信号を、抽出したエンベロープで平坦化した信号の波形を示す。
【0026】
図4の分析処理のフローに戻り、このエンベロープ検出およびエンベロープの平坦化が終了したら(ステップS1)、各種変数の初期化を行う。すなわち、オクターブ数カウンタoctを「1」に、オクターブ内分割数カウンタmを「0」に、間引きカウンタdを「0」に設定する(ステップS2)。すなわち、
oct=1
m=0
d=0
とする。
【0027】
次いで、オクターブ数カウンタoctが「1」か否かを判定し(ステップS3)、それによりダウンサンプリングを行うか否かを決める。このダウンサンプリングは、入力信号inをオクターブ単位で分割した各オクターブ帯域毎にサンプリング周波数fs を変化させるものである。具体的には入力信号の低域成分に対してはサンプリング周波数fs を低くするものである。これにより処理データ量の削減などの効果を得ることができる。この実施例では、オクターブ数カウンタoctが「1」を超えたら、ダウンサンプリングを行ってそのオクターブ番号(oct)のオクターブ帯域についてサンプリング周波数を半分にする(ステップS4)。つまり、図3において、第1オクターブについては元のサンプリング周波数fsoを用いるが、第2オクターブ以降はオクターブ数カウンタoctが増加する毎にサンプリング周波数fs を半分にしていくことになる。このダウンサンプリングの処理は、具体的には入力信号を遮断周波数がπ/2の特性を持つ低域フィルタに通過させた後に1サンプル間引きをすることで、サンプリングレートを半分にするものである。
【0028】
次いで、ステップS5〜S13では、現在のオクターブ帯域(オクターブ数カウンタoctで示されるオクターブ帯域)をオクターブ内分割数Mで分割した複数のオクターブ内分割帯域について、間引き変数DECIで示される数(DECI−1)のサンプル値ずつ入力信号のデータを間引きつつ(つまり、時間軸上で(DECI−1)置きに入力信号のデータを取り出して)、回転とフィルタリング処理を施してその振幅成分と周波数成分(ピッチ成分)に変換して、得たデータを、それぞれ対応する帯域のバンクメモリ(bank)に保存するものである。
【0029】
ここで、バンクメモリは各オクターブ帯域の各オクターブ内分割帯域にそれぞれ対応して設けられているものであり、第1オクターブのm=0のオクターブ内分割帯域に対応するバンクをバンク番号bank=0として以下順に並んだオクターブ内分割帯域に対応してバンク番号が付けられるものであり、その最大数MAX−BANKは、〔M*(MAX−OCT)−1〕となる。但し、MAC−OCTはオクターブ数octの最大値である。
【0030】
まず、回転処理(ステップS5)では以下の処理を行う。すなわち、入力信号に対して複素数e-jA 、〔但し、A=π/2+(2m+1)π/4M〕、をかけることにより、π/2+(m+1)π/2M〜π/2+mπ/2Mの帯域を、−π/2M〜π/2Mに移動させる。
ここで、オクターブ内分割数カウンタmは0〜(M−1)の値をとり、Mはオクターブ内分割数であり、ユーザが入力信号のタイプとして「メロディック」または「リズミック」のいずれを選択するかでその値が決まる。
【0031】
また、フィルタリング処理は、回転処理によって帯域をシフトさせた信号を低域通過フィルタに通すことに実現する(ステップS5)。この低域通過フィルタは、ユーザにより指定された入力信号のタイプが「メロディック」であり、従ってオクターブ内分割数M=8の時には、遮断周波数がπ/16で阻止利得が−50dBの低域通過フィルタが用いられる。一方、ユーザにより指定された入力信号のタイプが「リズミック」であり、従ってオクターブ内分割数M=4の時には、遮断周波数がπ/8で阻止利得が−100dBの低域通過フィルタが用いられる。ここで、「メロディック」の遮断周波数がπ/16で阻止利得が−50dBの低域通過フィルタは、そのタップ数が、「リズミック」の遮断周波数がπ/8で阻止利得が−100dBの低域通過フィルタよりも多くなっている関係にある。
【0032】
このフィルタリング処理を行った入力信号を振幅成分とピッチ成分に変換する(ステップS6)。詳細には、回転・フィルタリング処理後の入力信号の実部R(t)と虚部I(t)を、次式に従って振幅成分とピッチ成分に変換するものである。すなわち、入力信号を
R(t)+jI(t)
とすると、振幅power(t)は、
power(t)=〔R(t)2 +I(t)2 〕1/2
で求める。一方、周波数成分であるピッチpitch(t)は、
pitch(t)=[[I(t){R(t−1)−R(t)}−R(t){I(t−1)−I(t)}]/{R(t)2 +I(t)2 }+π/2+(2m+1)π/4M]*2oct-1
で求める。
【0033】
次いで、入力信号データの間引きをステップS7〜S11で行う。これは、入力信号のサンブル値を(DECI−1)個ずつ間引いて保存(つまり、(DECI−1)おきに一つずつ保存)するものであり、これにより保存するデータの量を削減している。
【0034】
まず、間引きカウンタdの値が「0」かを判定し(ステップS7)、「0」であれば、ステップS6で求めた振幅power(t)とピッチpitch(t)をデータとして現在の泰一に該当するバンク(bank)に格納する(ステップS8)。「0」でなければ、間引きカウンタdの値を一つインクリメントし(ステップS9)、その間引きカウンタdが(間引き数DECI−1)に達したかを判定し(ステップS10)、達していれば、間引きカウンタdを「0」にクリアする(ステップS11)。(DECI−1)に達していなければ、オクターブ内分割数カウンタmを一つ更新し(ステップS12)、このオクターブ内分割数カウンタmがオクターブ内分割数Mに達するまで(ステップS13)、ステップS5からステップS12までの処理を繰り返す。これにより、各オクターブ内分割帯域について入力信号データが時間軸上で(DECI−1)個ずつ間引かれて、それぞれの帯域に対応するバンクに格納されることになる。
【0035】
オクターブ内の分割数Mだけ処理を終えたならば(ステップS13)、次には、オクターブ数カウンタoctを一つ更新するとともに、オクターブ内分割数カウンタmを「0」にクリアして(ステップS14)、オクターブ数カウンタoctがオクターブ数MAX−OCT(ユーザが任意に指定可能であり、本実施例では10)に達するまで(ステップS15)、上述のステップS3〜S14を繰り返し、指定分のオクターブ数MAC−OCTの数だけ処理を終了したら、本フローを終える。
【0036】
次に、上述の分析処理で帯域分割した各信号を再合成する処理を図7および図8のフローチャートを参照して説明する。この図7および図8のフローチャートは再合成処理の手順を示すものであり、この再合成処理は、概略的に述べると、各帯域毎に分割した信号について、その振幅成分とピッチ成分の時間軸を、ユーザが指定した量だけタイムストレッチ(圧縮/伸長)したうえで、それら全部を足し合わすことで再合成し、さらにその再合成した信号(平坦化した信号)に、先の分析処理で抽出したエンベロープを上記同様ユーザが指定した量だけタイムストレッチして施して(すなわち復元して)、元の入力信号の時間軸をタイムストレッチした出力信号を生成するものである。
【0037】
合成処理が開始されると、まずバンク番号カウンタbankを「0」にクリアする(ステップS30)。次いで、サンプリング比rateを、
rate=その帯域のサンプリング周波数fs /システムのサンプリング周波数fso
により求める(ステップS31)。ここで、上記「その帯域のサンプリング周波数fs 」はダウンサンプリングがされているときにはそのダウンサンプリングされたサンプリング周波数fs である。
【0038】
次いで、データカウンタcntを「0」にクリアする(ステップS32)。次いで、タイムストレッチした出力信号(つまり最終的に得られる出力信号)の時間軸上の位置を示す変数ptrにダウンサンプリングおよび帯域通過処理によって発生した群遅延の量を入れる(ステップS33)。
【0039】
さらに、周波数変調に使うpcos 、psin に初期値を入れる(ステップS34)。すなわち、
pcos =pc=cos (pitch〔bank〕〔0〕)
psin =ps=sin (pitch〔bank〕〔0〕)
とする。
なおここで、pitch〔bank〕〔n〕の表示は、バンク番号bankのバンクメモリに格納されている時系列のピッチデータのうちから時間番号がn番目のデータを読み出すことを意味する。振幅データpower〔bank〕〔n〕についても同様である。
【0040】
次いで、変数ptrの整数部を整数部nに、また変数ptrの小数部を小数部xにそれぞれ入れる(ステップS35)。
【0041】
この後、変数ptrの現在の値に応じて信号の時間軸をタイムストレッチするために、まず、ステップS36〜S40でデータの補間、補外などの処理を行う。すなわち、変数ptrの整数部nが「0」より大きいかを調べ(ステップS36)、「0」以下であれば、振幅ワークバッファpwに「0」、周波数ワークバッファptに「0」をそれぞれ入れる(ステップS37)。一方、整数部nが「0」よりも大きければ、その整数部nがデータ長LENを超えていないかを調べる(ステップS38)。超えていなければデータを直線補間する処理を行い(ステップS39)、データ長LENに達していればデータを直線補外する処理を行う(ステップS40)。
【0042】
ここで、ステップS39のデータの直線補間処理は、左右のデータ〔(n+1)点目とn点目のデータ〕からその間のデータを生成して補う処理であり、具体的には、次の計算式
pw=(power〔bank〕〔n+1〕−power〔bank〕〔n〕)×x+power〔bank〕〔n〕)
pt=(pitch〔bank〕〔n+1〕−pitch〔bank〕〔n〕)×x+pitch〔bank〕〔n〕)
により求める。
【0043】
また、ステップS40のデータの直線補外処理は、データ長LENの端側にあるデータ(最後のデータと最後から2番目のデータ)に基づいてそのデータ長LENよりも更に外側のデータを予測して補う処理であり、具体的には、次の計算式
pw=(power〔bank〕〔LEN−1〕−power〔bank〕〔LEN−2〕)*x+power〔bank〕〔LEN−2〕)
pt=(pitch〔bank〕〔LEN−1〕−pitch〔bank〕〔LEN−2〕)*x+pitch〔bank〕〔LEN−2〕)
により求める。
【0044】
次いで、周波数ワークバッファptにピッチ変化指示量pRateをかける処理、すなわち
pt=pt*pRate
を行う(ステップS41)。このピッチ変化指示量pRateは、ユーザがピッチ変化させたい大きさに応じて指示するものであり、ピッチシフト比とも称する。例えばこのピッチ変化指示量pRateが「1.0」であればピッチはそのまま、「2.0」であれば2倍の周波数つまり1オクターブ上で再生される。これにより、入力信号のピッチをテンポ(すなわちタイムストレッチ)とは独立して変化させることができる。
【0045】
さらに、変数ptrをタイム変化指示量tRateの逆数だけ進める処理、すなわち、
ptr=ptr+rate/tRate
を行う(ステップS42)。このタイム変化指示量tRateは、ユーザがテンポ変化(すなわちタイムストレッチ)させたい大きさに応じて指示するものであり、タイムストレッチ比とも称する。例えばこのタイム変化指示量tRateが「1.0」であれば再生時間(テンポ)はそのまま、「2.0」であれば再生時間が2倍になる。
【0046】
ここで、上式中のサンプリング比rateはステップS31で求めた「その帯域のサンプリング周波数fs とシステムのサンプリング周波数fsoとの比」であり、よって、入力信号の分析処理においてダウンサンプリングを行った帯域については、ダウンサンプリングにより間引かれたデータ数(サンプル値数)が上式により元のサンプリング数(よってサンプリング周波数fso)に戻されることになる。
【0047】
この後、新しいpcとpsを、
pc=pcos *cos (pt)−psin *sin (pt)
ps=psin *cos (pt)+pcos *sin (pt)
により求め(ステップS43)、さらにpcos とpsin を
pcos =pc
psin =ps
により更新する(ステップS44)。
【0048】
この後、合成データバッファout(cnt)に今のバンクのデータを次式
out(cnt)=out(cnt)+pw*pc
に従って加える(ステップS45)。そして、データカウンタcntを一つインクリメントし(ステップS46)、その更新したデータカウンタcntが(LEN*tRate)を超えたか否かを調べる(ステップS47)。(LEN*tRate)を超えていなければ、ステップS35〜S46の処理を、cnt≧(LEN*tRate)となるまで繰り返す。データカウンタcntが(LEN/tRate)以上となったら、次にはバンク番号カウンタbankを一つインクリメントし(ステップS48)、そのバンク番号カウンタbankがバンク数MAX−BANKを超えたか否かを調べ(ステップS49)、MAX−BANKを超えていなければ、ステップS35〜S48の処理を、bank≧MAX−BANKとなるまで繰り返す。この処理を繰り返すことで、合成データバッファout(cnt)には、各帯域の信号を合計した合成信号を得ることができる。
【0049】
最後に、エンベロープの復元処理を行う(ステップS50)。図9にはこのエンベロープの復元処理の詳細な手順が示される。このエンベロープの復元処理では、入力信号の分析処理で抽出し保存しておいたエンベロープを、再合成処理で入力信号の時間軸を圧縮/伸張した量だけ同様に時間軸を圧縮/伸長し、そのエンベロープを再合成処理で合成した合成信号に施すことで、元の入力信号の時間軸を圧縮/伸長するものである。
【0050】
まず、データカウンタcntを「0」、変数ptrを「0」にそれぞれクリアする(ステップS51)。次いで、変数ptrの整数部を整数部nに、小数部を小数部xに入れる(ステップS52)。
【0051】
この後、分析処理で抽出したエンベロープの時間軸を変数ptrの現在値に応じてタイムストレッチするために、まず、ステップS53〜S57でエンベロープのデータの補間、補外などの処理を行う。すなわち、変数ptrの整数部nが「0」より大きいかを調べ(ステップS53)、「0」以下であれば、ワークバッファworkに「0」を入れる(ステップS54)。一方、整数部nが「0」よりも大きければ、その整数部nがデータ長LENを超えていないかを調べる(ステップS55)。超えていなければエンベロープのデータを直線補間する処理を行い(ステップS56)、データ長LENに達していればエンベロープのデータを直線補外する処理を行う(ステップS57)。
【0052】
ここで、ステップS56のエンベロープのデータの直線補間処理は、左右のエンベロープのデータ〔(n+1)点目とn点目のデータ〕からその間のデータを生成して補う処理であり、具体的には、次の計算式
work=(env〔n+1〕−env〔n〕)×x+env〔n〕)
によりエンベロープ値env(ptr)を求める。
【0053】
また、ステップS57のエンベロープのデータの直線補外処理は、データ長LENの端側にあるデータ(最後のデータと最後から2番目のデータ)に基づいてそのデータ長LENよりも更に外側のデータを予測して補う処理であり、具体的には、次の計算式
work=(env〔LEN−1〕−env〔LEN−2〕)*x+env〔LEN−2〕)
によりエンベロープ値env(ptr)を求める。
【0054】
次いで、変数ptrをタイム変化指示量tRateの逆数だけ進める処理、すなわち、
ptr=ptr+1/tRate
を行う(ステップS58)。
【0055】
この後、合成データバッファout(cnt)の合成信号(平坦化された信号)に、タイムストレッチされた上記のエンベロープ値を次式
out(cnt)=out(cnt)*work
でかけ(ステップS59)、合成信号にエンベロープを施す。
【0056】
そして、データカウンタcntを一つインクリメントし(ステップS60)、その更新したデータカウンタcntが(LEN*tRate)を超えたか否かを調べる(ステップS61)。(LEN*tRate)を超えていなければ、ステップS52〜S60の処理を、cnt≧(LEN*tRate)となるまで繰り返す。データカウンタcntが(LEN*tRate)以上となったら、エンベロープ復元処理を終了する。図10にはこのようにしてタイムストレッチしたエンベロープを用いて復元された出力信号の波形が示される。
【0057】
本発明の実施にあたっては種々の変形形態が可能である。例えば上述の実施例では、分析処理において入力信号の波形のエンベロープを抽出し、エンベロープ抽出後の入力信号を平坦化して、入力信号が急峻な波形によることの悪影響を受けないようにした後に、帯域分割・フィルタリング処理を施し、再合成後に、予め抽出しておいたエンベロープを付け直すようにしているが、これはより好ましい実施例であって本発明にとって必須な要件ではなく、このようなエンベロープ抽出・再付加の処理を行わずに入力信号をそのまま帯域分割・フィルタリング処理するものであっても勿論よい。
【0058】
また、例えば上述の実施例では、入力信号の帯域をまずオクターブ単位で分割し、さらにそのオクターブ帯域内を等間隔で分割しているが、各オクターブ帯域内の分割も等間隔ではなくセント軸で行ってもよい。
【0059】
また複素BPF(帯域フィルタ)の実現方法として入力信号に複素変調を施したが、分析フィルタのほうに予め複素変調を施しておき、それを用いて分析を行うようにしてもよいし、(fs /2)以上の折返しが発生しないようにしてフィルタを設計したものを使用してもよい。
【0060】
また、本実施例で使用しているフィルタは、全て最小位相形FIRフィルタを用いているが、直線位相FIRフィルタ若しくは直線位相IIRフィルタを用いるものであってもよい。
【0061】
また、実部と虚部からピッチに変換する部分を、前述の実施例における方法の他に、ピッチpitch(t)はtan -1〔I(t)/R(t)〕で求めた位相から前データをで求めた位相〔pitch(t−1)〕を引いて求めるものであってもよいし、あるいは、
tan -1〔{R(t−1)*I(t)−I(t−1)*R(t)}/{R(t−1)*R(t)−I(t−1)*I(t)}〕
で求めるものであってもよい。
【0062】
また、この部分とそれ以外の部分とに訳、複数のCPUまたはDSPによって並列処理するようにしてもよい。
【0063】
また、合成部分について実施例では余弦値を用いているが、これは正弦値でもよい。また、積分と発振を同時に行っているが、単にピッチを積分してからその位相値によって余弦もしくは正弦を求めてもよい。
【0064】
【発明の効果】
以上に説明したように、本発明によれば、ユーザ等があらかじめ信号のタイプ(態様)を指示し、それに応じて帯域の分割数と分析に使用するフィルタの特性を変更することで、その信号に適した形でタイムストレッチができるようになる。これにより、リズム系やメロディ系などのような楽音の種々のタイプに対しても、音楽性を損なうことなく入力信号のタイムストレッチを行うことが可能となる。
【図面の簡単な説明】
【図1】本発明に係る一実施例としてのタイムストレッチ装置の構成を示す図である。
【図2】実施例装置の表示器における入力信号のタイプ設定画面の例を示す図である。
【図3】実施例装置における帯域分割の概念を説明するための図である。
【図4】実施例装置における分析処理の処理手順を示すフローチャート(1/2)である。
【図5】実施例装置における分析処理の処理手順を示すフローチャート(2/2)である。
【図6】実施例装置における分析処理フロー中のエンベロープ検出処理の詳細な処理手順を示すフローチャートである。
【図7】実施例装置における再合成処理の処理手順を示すフローチャート(1/2)である。
【図8】実施例装置における再合成処理の処理手順を示すフローチャート(2/2)である。
【図9】実施例装置における再合成フロー中のエンベロープ復元処理の詳細な処理手順を示すフローチャートである。
【図10】実施例装置のエンベロープ検出処理により入力信号波形から検出したエンベロープを示す図である。
【図11】実施例装置の平坦化処理により入力信号信号のエンベロープを平坦化した信号波形を示す図である。
【図12】実施例装置のエンベロープ復元処理によりエンベロープが復元された出力信号を示す図である。
【図13】帯域分割と再合成によりタイムストレッチを行う従来装置の構成例を示す図である。
【図14】帯域分割と再合成によりタイムストレッチを行う従来装置における帯域分割の概念を説明する図である。
【図15】帯域分割と再合成によりタイムストレッチを行う従来装置において分割した帯域のタイムストレッチの仕方を説明する図である。
【符号の説明】
1 CPU(中央処理装置)
2 ROM(リード・オンリー・メモリ)
3 RAM(ランダム・アクセス・メモリ)
4 操作子群
5 表示器
6 ハードディスク駆動装置
7 CD−ROM駆動装置
8 A/D変換器
9 D/A変換器
Claims (1)
- 入力信号をタイムストレッチする量を指示する指示手段と、
入力信号のタイプを指示するタイプ指示手段と、
入力信号をフィルタを用いて複数の帯域に分割し各帯域の信号を振幅成分と周波数成分に変換してその時間変化の速度を該指示手段で指示した指示量に基づき変えた後に再合成することで入力信号をタイムストレッチするタイムストレッチ手段と、
該タイムストレッチ手段での帯域の分割数と該フィルタの使用する特性を該タイプ指示手段で指示した入力信号のタイプに応じて変更する変更手段と
を備えたタイムストレッチ装置。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP16693398A JP3945795B2 (ja) | 1998-06-15 | 1998-06-15 | タイムストレッチ装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP16693398A JP3945795B2 (ja) | 1998-06-15 | 1998-06-15 | タイムストレッチ装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
JP2000003178A JP2000003178A (ja) | 2000-01-07 |
JP3945795B2 true JP3945795B2 (ja) | 2007-07-18 |
Family
ID=15840357
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP16693398A Expired - Fee Related JP3945795B2 (ja) | 1998-06-15 | 1998-06-15 | タイムストレッチ装置 |
Country Status (1)
Country | Link |
---|---|
JP (1) | JP3945795B2 (ja) |
Families Citing this family (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP5125527B2 (ja) | 2008-01-15 | 2013-01-23 | ティアック株式会社 | 多重録音装置 |
JP5181685B2 (ja) | 2008-01-15 | 2013-04-10 | ティアック株式会社 | 多重録音装置 |
-
1998
- 1998-06-15 JP JP16693398A patent/JP3945795B2/ja not_active Expired - Fee Related
Also Published As
Publication number | Publication date |
---|---|
JP2000003178A (ja) | 2000-01-07 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US6721711B1 (en) | Audio waveform reproduction apparatus | |
JPS647400B2 (ja) | ||
JPH07325583A (ja) | サウンドの分析及び合成方法並びに装置 | |
EP1840871B1 (en) | Audio waveform processing device, method, and program | |
JP3945795B2 (ja) | タイムストレッチ装置 | |
JP3945794B2 (ja) | タイムストレッチ装置 | |
JPH04358200A (ja) | 音声合成装置 | |
US5185491A (en) | Method for processing a waveform | |
JP2001255876A (ja) | 時間軸方向における楽音波形信号の伸縮方法 | |
JP4245114B2 (ja) | 音色制御装置 | |
JP5552794B2 (ja) | 音響信号の符号化方法および装置 | |
JPH05119782A (ja) | 音源装置 | |
JP3733964B2 (ja) | 分析結果を用いた音源波形合成装置 | |
JP2990897B2 (ja) | 音源装置 | |
JP3018659B2 (ja) | 楽音波形合成装置 | |
JP2712943B2 (ja) | 音源装置 | |
JP3433673B2 (ja) | 楽音波形分析方法及び楽音波形分析装置 | |
JP3538908B2 (ja) | 電子楽器 | |
JPS6091227A (ja) | 音響解析装置の合成装置 | |
JP2967661B2 (ja) | 楽音合成装置 | |
JP2947130B2 (ja) | 波形データ処理装置 | |
JP3029056B2 (ja) | 電子楽器 | |
JP2924366B2 (ja) | 音源装置 | |
JP3669040B2 (ja) | 波形処理装置 | |
JP5609280B2 (ja) | 音響信号の符号化方法および装置 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
RD04 | Notification of resignation of power of attorney |
Free format text: JAPANESE INTERMEDIATE CODE: A7424 Effective date: 20050427 |
|
A621 | Written request for application examination |
Free format text: JAPANESE INTERMEDIATE CODE: A621 Effective date: 20050614 |
|
A977 | Report on retrieval |
Free format text: JAPANESE INTERMEDIATE CODE: A971007 Effective date: 20070322 |
|
TRDD | Decision of grant or rejection written | ||
A01 | Written decision to grant a patent or to grant a registration (utility model) |
Free format text: JAPANESE INTERMEDIATE CODE: A01 Effective date: 20070403 |
|
A61 | First payment of annual fees (during grant procedure) |
Free format text: JAPANESE INTERMEDIATE CODE: A61 Effective date: 20070409 |
|
R150 | Certificate of patent or registration of utility model |
Free format text: JAPANESE INTERMEDIATE CODE: R150 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20110420 Year of fee payment: 4 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20110420 Year of fee payment: 4 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20120420 Year of fee payment: 5 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20120420 Year of fee payment: 5 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20130420 Year of fee payment: 6 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20140420 Year of fee payment: 7 |
|
LAPS | Cancellation because of no payment of annual fees |