KR100500077B1 - 악음 생성 방법 및 장치 - Google Patents

악음 생성 방법 및 장치 Download PDF

Info

Publication number
KR100500077B1
KR100500077B1 KR1020040057745A KR20040057745A KR100500077B1 KR 100500077 B1 KR100500077 B1 KR 100500077B1 KR 1020040057745 A KR1020040057745 A KR 1020040057745A KR 20040057745 A KR20040057745 A KR 20040057745A KR 100500077 B1 KR100500077 B1 KR 100500077B1
Authority
KR
South Korea
Prior art keywords
sound
sound source
software
generated
data
Prior art date
Application number
KR1020040057745A
Other languages
English (en)
Inventor
다무라모토이치
Original Assignee
야마하 가부시키가이샤
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by 야마하 가부시키가이샤 filed Critical 야마하 가부시키가이샤
Application granted granted Critical
Publication of KR100500077B1 publication Critical patent/KR100500077B1/ko

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/16Sound input; Sound output
    • GPHYSICS
    • G10MUSICAL INSTRUMENTS; ACOUSTICS
    • G10HELECTROPHONIC MUSICAL INSTRUMENTS; INSTRUMENTS IN WHICH THE TONES ARE GENERATED BY ELECTROMECHANICAL MEANS OR ELECTRONIC GENERATORS, OR IN WHICH THE TONES ARE SYNTHESISED FROM A DATA STORE
    • G10H1/00Details of electrophonic musical instruments
    • G10H1/0033Recording/reproducing or transmission of music for electrophonic musical instruments
    • G10H1/0041Recording/reproducing or transmission of music for electrophonic musical instruments in coded form
    • G10H1/0058Transmission between separate instruments or between individual components of a musical system
    • G10H1/0066Transmission between separate instruments or between individual components of a musical system using a MIDI interface
    • GPHYSICS
    • G10MUSICAL INSTRUMENTS; ACOUSTICS
    • G10HELECTROPHONIC MUSICAL INSTRUMENTS; INSTRUMENTS IN WHICH THE TONES ARE GENERATED BY ELECTROMECHANICAL MEANS OR ELECTRONIC GENERATORS, OR IN WHICH THE TONES ARE SYNTHESISED FROM A DATA STORE
    • G10H7/00Instruments in which the tones are synthesised from a data store, e.g. computer organs
    • G10H7/002Instruments in which the tones are synthesised from a data store, e.g. computer organs using a common processing for different operations or calculations, and a set of microinstructions (programme) to control the sequence thereof
    • G10H7/006Instruments in which the tones are synthesised from a data store, e.g. computer organs using a common processing for different operations or calculations, and a set of microinstructions (programme) to control the sequence thereof using two or more algorithms of different types to generate tones, e.g. according to tone color or to processor workload

Landscapes

  • Engineering & Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • Acoustics & Sound (AREA)
  • Multimedia (AREA)
  • General Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Health & Medical Sciences (AREA)
  • Audiology, Speech & Language Pathology (AREA)
  • General Health & Medical Sciences (AREA)
  • Human Computer Interaction (AREA)
  • General Physics & Mathematics (AREA)
  • Electrophonic Musical Instruments (AREA)

Abstract

본 발명은 OS를 통해 MIDI 연주정보를 받고, 이것에 의거해서 어플리케이션 레벨의 소프트음원을 구동하여 소프트음원의 OS레벨에서의 간이한 응용범위를 넓히는 컴퓨터 소프트웨어를 이용한 음원 시스템에 관한 것으로, 의사적 드라이버(FMD)를 OS에 인스톨하고, 어플리케이션 소프트(APS1)로부터 출력된 연주정보를 OS를 통해 상기 의사적 드라이버에서 받아들여서 상기 연주정보를 어플리케이션 레벨의 소프트음원(SSM)에 인가하도록 하고 있다. 또다른 예로는 상기 소프트음원(SSM)을 OS에 드라이버로서 인스톨하고, 어플리케이션 소프트(APS1)로부터 출력된 연주정보를 OS를 통해 상기 소프트음원이 받아들일 수 있도록 한다.

Description

악음 생성 방법 및 장치{Tone generating method and device}
본 발명은 CPU와 같은 범용 연산처리수단 즉 컴퓨터를 사용하여 소프트웨어로서 기술된 음파형 데이터 생성처리 프로그램을 실행하는 것에 의거해서 음파형 데이터를 생성하는 음원시스템에 관한 것이다.
전자악기에서는 악음생성처리(악음생성처리에 의해 생성한 악음파형 데이터에 이펙트를 부가하는 처리를 포함하는 경우도 있다)를 마이크로 프로세서에 실행시키는 것이 널리 행해지고 있다. 그와 같은 마이크로 프로세서로는 악음생성방식(예를들면 파형메모리방식이나 FM 합성방식 등)에 따른 회로구성을 채용하여 이루어진 전용 하드웨어(예를들면 음원 LSI나 DSP(디지털 시그널 프로세서) 등)를 설계하는 것이 일반적이었다.
그러나, 최근 CPU의 연산능력의 향상에 따라 범용 컴퓨터나 전용 악음발생장치에 탑재한 CPU에서 소정의 악음생성 처리순서를 기술한 프로그램을 실행시킴으로써 악음파형데이터를 생성시키도록 한 것이 등장하고 있다. 여기서는 그와 같은 악음생성처리 프로그램을 기초로 하는 악음생성장치나 악음생성방법을 CPU음원 또는 소프트웨어 음원(필요에 따라 소프트음원이라 약칭한다)이라 부르며, 이에 반해 전용 하드웨어를 사용하는 종래부터의 악음생성장치나 악음생성방법을 하드음원이라 부르기로 한다.
종래의 소프트음원은 어플리케이션 레벨의 소프트웨어로 구성되어 있다. 도22는 어플리케이션 레벨의 소프트음원을 구비한 종래 기술의 소프트웨어 구조의 일예를 나타낸 도면이다. 이 소프트웨어 구조는 프로그래밍 복잡함의 저감화를 목적으로 하며, 독립적으로 프로그래밍할 수 있는 최소단위(모듈)의 복합체로서 계층적으로 구성되어 있다. 최상위 계층의 프로그램은 MIDI 메시지를 작성하기 위한 모듈인데, 구체적으로는 시퀀서 소프트나 게임 소프트나 가라오케 소프트 등의 형태를 취하는 어플리케이션 소프트웨어로 이루어져 있다.
도22에서는 어플리케이션 소프트웨어의 형태예로서 2가지 형태가 병렬적으로 도시되어 있다. 하나는 가라오케 플레이어에 탑재된 MIDI 재생 소프트의 형태를 취하고 있다. 가라오케 플레이어에서는 다수의 가라오케곡에 대한 파일을 MIDI 형식으로 기억하고 있으며, 선택된 가라오케곡의 파일을 판독하고, 그 연주정보를 MIDI 메시지 폼으로 출력한다. 가라오케 소프트의 하위 계층에는 소프트음원 모듈이 형성된다. 이 소프트음원 모듈의 입력측에는 소정의 소프트음원용 API(어플리케이션 프로그래밍 인터페이스)가 형성되어 있다(도면중 "SGM MIDI out API"라고 기재된 것이 소프트음원용 API이다).
소프트음원 모듈은 도면중 "SGM MIDI out API"와 같은 전용의 소프트 음원용 API 경유로 공급되는 MIDI 메시지에 의거해서 악음파형 데이터를 생성하기 위한 프로그램으로 이루어져 있다. 이 소프트음원 모듈은 도23에 나타낸 바와 같이,「MIDI 출력 드라이버부」와 「음원부(엔진부)」의 2개의 모듈로 구성되어 있다. 「MIDI 출력 드라이버부」와 「음원부」를 구동하기 위한 모듈이며, MIDI 메시지에 따라 보이스 데이터를 「음원부」 제어용 제어 파라미터로 변환한다. 이 제어 파라미터는 모듈 사이의 소정의 인터페이스 경유하에 「음원부」로 이송된다. 또,「MIDI 출력 드라이버부」가 초기화될 때 필요한 파형데이터군이 파일로부터 로드되어「파형데이터 기억부」에 저장된다. 「음원부」는 이 제어파라미터에 따라 「파형데이터 기억부」에 저장된 파형데이터군을 이용하여 (예를들면 소요 피치로 판독하여), 소요 피치나 음색 등의 악음특징을 구비하는 악음파형 데이터(순차 샘플점의 악음파형 데이터)를 생성한다.
컴퓨터에서 채용되는 소정의 오퍼레이팅 시스템(예를들면 마이크로 소프트사 제품의 Windows 3.1(상표)이나 Windows 95(상표) 등)에 있어서는 생성이 끝난 파형데이터(파형샘플데이터)를 수수하기 위한 인터페이스(예를들면 Windows 3.1(상표)에서는 "WAVE out API")가 준비되어 있다.「출력디바이스」는 오퍼레이팅 시스템(이하 필요에 따라 OS라 약칭한다)에 인스톨된 드라이버 모듈이며, 어플리케이션 소프트로서의 상기 소프트음원 모듈에서 생성된 파형데이터를 상기 "WAVE out API"와 같은 소정의 인터페이스를 통해 받아들이고, 이것을 외부의 하드웨어에 대해 출력하는 처리를 한다. 「출력디바이스」는 예를들면 소프트음원 모듈의 처리에 의해 생성되어 하드디스크와 같은 기억장치에 버퍼기억된 파형데이터를 다이렉트 메모리 액세스(DMA) 컨트롤러를 통해 판독하는데, 예를들면 디지털/애널로그 컴퓨터(DAC)로 이루어진 상기 외부 하드웨어에 대해 출력하는 처리를 행하는 소프트웨어로 이루어져 있다.
도22에 도시된 MIDI 플레이어는 MIDI 재생 모듈과 소프트음원 모듈을 미리 내장하고 있는 타입이다. MIDI 재생 모듈에서는 스탠다드 MIDI 파일(SMF)을 판독하여 MIDI 메시지를 재생한다. 재생된 MIDI 메시지가 소프트음원 모듈에서 처리되어 상기와 같이 상기 MIDI 메시지에 대응하는 악음파형 데이터가 생성된다. 이 MIDI 플레이어내의 소프트음원 모듈에서 생성된 악음파형 데이터는 상기와 같이 "WAVE out API"와 같은 소정의 인터페이스를 통해 「출력디바이스」에 의해 처리되고, 외부의 하드웨어(예를들면 DAC)에 대해 출력된다.
한편, 컴퓨터의 오퍼레이팅 시스템에 있어서는, 파형데이터를 생성하는 기초가 되는 연주정보(전형적으로는 MIDI 메시지)를 수수하기 위한 인터페이스(예를들면 Windows3.1(상표)에서는 "MIDI API")도 준비되어 있다. 이와 같은 인터페이스의 존재에 의해 MIDI 메시지를 출력하는 소프트웨어를 어플리케이션 소프트로서 이용할 수도 있다. 도24는 그 일예를 나타낸 것으로, 게임소프트나 시퀀서 소프트 혹은 멀티미디어 소프트 등으로부터 다양한 게임효과음이나 배경음(BGM)의 MIDI 데이터 혹은 자동 시퀀스 연주음의 연주정보가 MIDI 메시지 폼으로 출력된다. 이것이 상기 "MIDI API"와 같은 소정의 인터페이스를 통해 OS에서 받아들여져서 MIDI 드라이버에 인가된다. MIDI 드라이버에서는 인가된 MIDI 메시지에 의거한 악음생성용 데이터를 외부의 하드웨어 음원에 인가한다. 외부의 하드웨어 음원에서는 인가된 데이터에 의거해서 소정의 악음생성용 하드웨어장치를 이용해서 파형데이터를 생성한다.
상술한 바와 같이, 종래의 어플리케이션 레벨의 소프트음원에 있어서는, OS의 소정의 인터페이스(예를들면 WAVE out API)에 생성이 끝난 파형데이터를 출력할 수 있으나, 파형데이터를 생성하는 기초가 되는 연주정보를 수수하기 위한 인터페이스(예를들면 MIDI API)로부터의 데이터를 받아들이며, 이것에 의거한 파형데이터 생성처리를 할 수 없다.
그 때문에, 게임소프트나 시퀀서 소프트 혹은 멀티 미디어 소프트 등의 연주정보(MIDI 메시지)를 발생하는 각종 소프트웨어와, 어플리케이션 레벨의 소프트음원을 컴퓨터의 OS를 통해 간편하게 조합할 수가 없었다. 또, 그 때문에 게임소프트나 시퀀서 소프트 혹은 멀티 미디어 소프트 등의 연주정보(MIDI 메시지)를 발생하는 각종 소프트웨어를 컴퓨터의 OS에 적용하여 간편하게 사용할 수 있도록 하려면 아무래도 하드웨어 음원이 필요해지므로 비용이 들어가게 되었다.
그러나, MIDI 메시지 등의 연주정보에 의거해서 악음발생처리를 하고자 할 경우, 컴퓨터가 악음발생처리만을 실행하는 경우는 드물며, 다른 소프트웨어 프로그램을 같은 OS상에서 병행하여 처리하는 경우가 많다. 예를들면, 게임소프트를 실행할 때에는 음성발생처리에 병행하여 동화상의 발생처리 등을 할 필요가 있으며, 가라오케 소프트를 실행하는 경우에도 가사화상 및 배경화상의 발생처리를 동시병행적으로 할 필요가 있다. 그와 같은 경우, 소프트웨어 음원을 사용할 경우, 컴퓨터는 그 소프트웨어 음원의 프로그램과 다른 필요한 소프트웨어 프로그램을 같은 OS상에서 병행하여 처리하게 된다. 그런 경우에는 다른 처리에 영향을 받지 않고 소프트웨어 음원에 의한 악음파형 데이터 생성처리의 실행이 확보되도록 하기 위해 멀티 태스크기능을 가진 OS(예를들면 Windows95(상표) 등)상에서 악음생성처리를 실행시키는 것이 바람직하다. 그러나, 완전한 멀티 태스크기능을 갖지 않은 OS(예를들면 Windows3.1(상표) 등)도 널리 보급되어 있으며, 그러한 OS상에서도 악음생성처리를 실행시키고자 하는 욕구가 존재하고 있다. 그러나, 그러한 OS상에서는 다른 소프트웨어 처리의 영향으로 인해 악음생성처리의 실행이 지연되는데, 그 결과 발음에 지장이 생기는 경우가 있을 수 있으며, 반대로 악음생성처리에 긴 시간을 소비하는데 영향을 받아 다른 처리의 실행이 지연된다는 문제도 일어날 수 있다. 특히, 종래에는 하드웨어 음원을 사용했으므로, 그와 같은 병행처리의 문제가 일어나지 않았던 어플리케이션 소프트에 있어서, 본 발명에 따라 소프트웨어 음원을 사용하게 하면 그와 같은 병행처리의 문제가 일어날 우려가 있으므로, 미리 해결책을 강구하는 것이 바람직하다.
본 발명은 상술한 점을 감안하여 이루어진 것으로, 오퍼레이션 시스템을 통해 MIDI 메시지와 같은 연주정보를 받고, 이것에 의거해서 어플리케이션 레벨의 소프트웨어 음원을 구동할 수 있도록 함으로써 소프트웨어 음원의 응용범위를 넓힐 수 있도록 한 컴퓨터 소프트웨어를 이용한 음원 시스템을 제공하고자 한 것이다.
또, 완전한 멀티 태스크 기능을 갖지 않은 OS상에서 소프트웨어 음원에 의한 음파형 데이터 생성처리와 다른 소프트웨어의 처리를 병행하여 실행시키는 경우에도 악음생성처리나 다른 처리에 지장이 생기지 않도록 한 컴퓨터 소프트웨어를 이용한 음원 시스템을 제공하고자 하는 것이다.
제1관점에 의하면 본 발명은 소정의 오퍼레이팅 시스템과 소프트웨어 음원의 프로그램을 탑재한 컴퓨터를 이용해서 음파형 데이터를 생성하기 위한 음원 시스템에 있어서, 상기 오퍼레이팅 시스템은 파형데이터를 생성하는 기초가 되는 연주정보를 수수하기 위한 제1 인터페이스와, 생성이 끝난 파형데이터를 수수하기 위한 제2 인터페이스를 가지고 있으며, 또 상기 소프트웨어 음원은 연주정보를 받아들이고, 이것에 의거해서 파형데이터를 생성하는 처리를 행하며, 생성한 파형데이터를 상기 제2 인터페이스를 통해 출력하는 어플리케이션 레벨의 소프트웨어이며, 거기에서 상기 오퍼레이팅 시스템에 드라이버로서 인스톨되고, 상기 제1 인터페이스를 통해 인가된 상기 연주정보를 받아들이고, 받아들인 상기 연주정보를 상기 소프트웨어 음원에 인가하도록 프로그램된 의사적 드라이버를 좀더 구비한 것을 특징으로 하는 것이다.
상기 제1의 관점에 의하면, 의사적 드라이버를 형성함으로써 적당한 어플리케이션 소프트를 통해 제1 인터페이스를 통해 인가된 연주정보(예를들면 MIDI 메시지)를 상기 의사적 드라이버에 의해 받아들이고, 이 받아들인 연주정보를 소프트웨어 음원에 인가할 수 있다. 따라서, 스스로가 어플리케이션 소프트이기도 한 소프트웨어 음원이 상기 별도의 어플리케이션 소프트로부터 인가되는 연주정보를 입력하고, 이것에 의거해서 음파형 데이터 생성처리를 할 수 있다. 따라서, 어플리케이션 소프트인 소프트웨어 음원과 별도의 어플리케이션 소프트를 OS레벨로 간단하게 조합할 수 있어서, 상기 별도의 어플리케이션 소프트로부터 제1 인터페이스를 통해 인가되는 연주정보(예를들면 MIDI 메시지)를 소프트웨어 음원에 입력하고, 그것에 대응하는 음파형 데이터를 생성할 수 있다. 이에 따라 어플리케이션 소프트인 소프트웨어 음원의 응용범위를 넓힐 수 있음과 동시에, 게임 소프트나 시퀀서 소프트 혹은 멀티 미디어 소프트 등의 연주정보(MIDI 메시지)를 발생하는 각종 어플리케이션 소프트웨어를 컴퓨터의 OS에 적용하여 간편하게 사용할 수 있도록 할 경우에 하드웨어 음원을 필요없게 할 수 있으므로, 이러한 간편한 응용성을 확보하면서 코스트면에서도 유리해진다는 뛰어난 효과를 가진다.
상기 제1 인터페이스에 연주정보를 인가하는 제1수단(즉, MIDI 메시지와 같은 연주정보를 발생하는 상기 별도의 어플리케이션 소프트)과, 상기 소프트웨어 음원에 연주정보를 인가하는 제2수단(즉, OS를 경유하지 않고 종래 공지된 바와 같이 소프트웨어 음원에 전용으로 조립된 가라오케 소프트 등의 적당한 소프트웨어)을 구비하고, 상기 소프트웨어 음원은 상기 제1인터페이스를 경유하여 상기 제1수단으로부터 인가되는 연주정보에 의거한 파형데이터 생성처리와 상기 제2수단으로부터 직접 인가되는 연주정보에 의거한 파형데이터 생성처리를 실행하도록 해도 된다. 이에 따라, 종래 공지된 바와 같은 소프트웨어 음원에 전용으로 조립된 소프트웨어(즉 제2수단)와, OS를 통해 상기 소프트웨어 음원과 조합되는 별도의 소프트웨어(즉 제1수단)에 의해, 병행하여 상기 소프트웨어 음원을 이용할 수 있게 된다.
제2의 관점에 의하면, 본 발명은 소정의 오퍼레이팅 시스템과 소프트웨어 음원의 프로그램을 탑재한 컴퓨터를 이용하여 음파형 데이터를 생성하기 위한 음원 시스템에 있어서, 상기 오퍼레이팅 시스템은 파형데이터를 생성하는 기초가 되는 연주정보를 수수하기 위한 제1 인터페이스와, 생성이 끝난 파형데이터를 수수하기 위한 제2 인터페이스를 가지고 있으며, 또 상기 소프트웨어 음원은 연주정보를 받아들이고, 이것에 의거해서 파형데이터를 생성하는 처리를 행하며, 생성한 파형데이터를 상기 제2 인터페이스를 통해 출력하는 어플리케이션 레벨의 소프트웨어이며, 거기에서 상기 소프트웨어 음원의 프로그램을 상기 오퍼레이팅 시스템에 드라이버로서 인스톨함과 동시에, 상기 소프트웨어 음원이 상기 제1 인터페이스를 통해 인가되는 상기 연주정보를 받아들이도록 프로그램하여, 상기 제1 인터페이스를 통해 받아들인 연주정보에 의거한 파형데이터 생성처리를 상기 소프트웨어 음원에 따라 실행하도록 한 것을 특징으로 한다.
상기 제2의 관점에 의하면, 어플리케이션 소프트인 상기 소프트웨어 음원의 프로그램을 상기 오퍼레이팅 시스템에 드라이버로서 인스톨함과 동시에, 상기 소프트웨어 음원이 상기 제1 인터페이스를 통해 인가되는 상기 연주정보를 받아들이도록 프로그램함으로써, 적절한 어플리케이션 소프트를 통해 제1 인터페이스를 통해 인가되는 연주정보(예를들면 MIDI 메시지)를 OS를 통해 소프트웨어 음원에 인가할 수 있다. 따라서, 이 경우에도 스스로가 어플리케이션 소프트이기도 한 소프트웨어 음원이 상기 별도의 어플리케이션 소프트로부터 인가되는 연주정보를 입력하고, 이것에 의거해서 음파형 데이터 생성처리를 할 수 있으므로, 상기와 동일한 효과를 가진다.
제3의 관점에 의하면, 상기의 각 음원시스템에 있어서 상기 컴퓨터는 상기 소프트웨어 음원의 프로그램과 그밖의 프로그램을 병행하여 실행하는 제어를 하는 메인 제어부를 가지고 있으며, 이 메인 제어부는 소정 시간내의 다수회의 기동 기회중 상기 소프트웨어 음원의 프로그램을 실제로 실행해도 좋은 기회에 기동명령을 발생하는 기동명령 발생수단을 구비하고 있으며, 또 상기 소프트웨어 음원에 있어서, 상기 기동명령에 따라 파형데이터 생성처리를 실제로 기동하는 기회만큼 통산적으로 상기 소정 시간내에 소정 샘플수 만큼의 파형데이터를 생성시키도록 파형데이터 생성처리를 조정하는 조정처리수단을 구비하고 있는 것을 특징으로 한다.
이것에 의하면, 컴퓨터의 메인 제어부에서 기동명령 발생수단을 형성하고, 파형데이터 생성처리를 기동하는 기회를 소정 시간내에 다수회 설정하고, 이 다수회의 기회중 상기 소프트웨어 음원의 프로그램을 실제로 실행해도 좋은 기회에만 기동명령을 발생한다. 이에 따라 메인 제어부는 다른 프로그램의 실행상황과의 균형에 의해 소프트웨어 음원의 프로그램을 실제로 실행해도 좋은 기회에만 기동명령을 발생할 수 있으며, 소프트웨어 음원의 프로그램과 그밖의 프로그램을 적절히 시분할 제어하여 병행하여 실행시킬 수 있다.
한편, 소프트웨어 음원에 있어서, 상기 기동명령에 따라 파형데이터 생성처리를 실제로 기동한 기회만큼 통산적으로 상기 소정 시간내에 소정 샘플수 만큼의 파형데이터를 생성시키도록 파형데이터 생성처리를 조정하는 조정처리수단을 구비하고 있다. 따라서, 소정 시간내에 설정된 다수회의 기동기회중 몇회인가의 기회에 기동명령이 발생되지 않았다고 해도 기동명령에 따라 파형데이터 생성처리를 실제로 기동한 기회만큼 사용하여, 통산적으로 상기 소정 시간내에 소정 샘플수 만큼의 음파형 데이터를 생성이 완료하도록 제어된다. 즉, 소프트웨어 음원에 있어서의 1회의 기동명령에 의거한 파형데이터 생성처리량이 융통성있게 가변제어되며, 소정 시간내에 실제의 기동명령 발생회수가 메인 제어부의 상황에 의존하는 가변수이더라도 통산적으로 상기 소정 시간내에 소정 샘플수 만큼의 음파형 데이터를 생성이 완료되도록 제어할 수 있다.
따라서, 완전한 멀티 태스크기능을 갖지 않은 OS상에서 소프트웨어 음원에 의한 음파형 데이터 생성처리와 다른 소프트웨어의 처리를 병행하여 실행시키는 경우에도, 음파형 데이터 생성처리 및 다른 소프트웨어의 처리에 지장이 생기지 않도록 할 수 있다는 뛰어난 효과를 가진다. 즉, 다른 소프트웨어 처리의 영향으로 인해 음파형 데이터 생성처리의 기동명령 발생회수가 상대적으로 줄었다고 해도, 통산적으로 상기 소정 시간내에 소정 샘플수 만큼의 음파형 데이터를 생성이 완료하도록 제어되므로, 발음지연 등의 지장이 생기는 일이 없어진다. 반대로 음파형 데이터 생성처리를 고정된 시분할적 처리시간에 수행하지 않음에 따라, 다른 소프트웨어 처리의 실행이 음파형 데이터 생성처리에 의해 저해되어 그 처리가 지연된다는 문제가 일어나지 않게 할 수 있다.
일실시형태로서 상기 조정처리수단은 각 기동명령에 대응하는 시점에 있어서, 그 시점까지 생성처리해야 할 파형데이터의 미처리량의 함수로서 상기 시점의 1기동명령에 따라 생성해야 할 파형데이터양을 결정하는 것이어도 되는데, 그런 경우 상기 소프트웨어 음원은 상기 결정된 파형데이터양 만큼의 파형데이터를 생성하는 처리를 상기 1기동명령에 따라 실행한다. 이에 따라 상기 함수를 적절히 결정함으로써 생성처리해야 할 파형데이터의 미처리량과의 균형에 의해 1기동명령에 따라 생성해야 할 파형데이터양을 적당히 결정할 수 있으며, 1기동명령에 대응하는 소프트웨어 음원의 처리에 의해 메인 제어부의 작업이 점유됨으로써 다른 처리의 실행이 저해되는 일이 발행할 확률을 가능한 한 낮게 제어할 수 있게 된다.
다음에 제4의 관점에 의하면, 본 발명은 소정의 오퍼레이팅 시스템에서 동작하는 사운드 프로그램을 실행함으로써 음파형 데이터를 생성하기 위한 음원시스템에 있어서, 상기 오퍼레이팅 시스템은 생성이 끝난 파형데이터를 수수하기 위한 제1 인터페이스와, 파형데이터를 생성하는 기초가 되는 연주정보를 수수하기 위한 제2 인터페이스와, 생성이 끝난 파형데이터를 수수하기 위한 제3 인터페이스를 가지고 있고, 상기 사운드 프로그램은 상기 오퍼레이팅 시스템에 드라이버로서 인스톨되어 있으며, 상기 제2 인터페이스로부터 입력된 연주정보에 의거해서 악음생성처리를 실행하며 파형데이터를 생성하는 생성스텝과, 상기 제3 인터페이스로부터 입력된 파형데이터와 상기 생성스텝에서 생성된 파형데이터를 동기(同期)를 취해 혼합하는 혼합스텝과, 상기 혼합스텝에서 혼합한 파형데이터를 상기 제1인터페이스에 출력하는 출력스텝을 실행하는 것을 특징으로 한다.
상술한 제2의 관점에 관한 음원스시스템에서는 소프트웨어 음원이 스타트하면 생성이 끝난 파형데이터를 수수하기 위한 제1 인터페이스가 소프트웨어 음원에 의해 점유되어 버려서, 그밖의 어플리케이션 소프트로부터 발생한 파형데이터를 당해 인터페이스에 출력할 수가 없었다. 이에 대해, 이 제4의 관점에 의하면, 오퍼레이팅 시스템이 생성이 끝난 파형데이터를 수수하기 위한 인터페이스로서 제1 인터페이스와는 별도로 제3 인터페이스를 가지고 있다. 따라서, 제1인터페이스가 소프트웨어 음원에 의해 점유되어 있어도 다른 적당한 어플리케이션 소프트로부터 발생한 파형데이터를 제3 인터페이스에 출력할 수 있다.
그러나, 종래의 과제로 설명한 바와 같이, 완전한 멀티 태스크기능을 갖지 않은 OS상에서는 연주정보에 의거한 악음생성처리에. 병행하여 실행하지 않으면 안되는 다른 소프트웨어의 처리의 영향으로 인해 지연이 생긴다. 그 때문에 다른 어플리케이션 소프트로부터 제2 인터페이스를 통해 입력된 연주정보에 의거해서 소프트웨어 음원에서 파형데이터의 생성이 완료되는 타이밍은, 당해 연주정보의 발생타이밍과 같은 타이밍에서 다른 어플리케이션 소프트로부터 발생한 파형데이터가 제3 인터페이스에 출력되는 타이밍보다 지연되게 되므로, 이들 파형데이터를 그 타이밍 상태로 OS에 인가하면 재생 타이밍이 어긋나서 연주상 적합치 않다.
따라서, 이 제4의 관점에 의하면, 오퍼레이팅 시스템에 드라이버로서 인스톨된 어플리케이션 소프트인 사운드 프로그램이 제2 인터페이스를 통해 입력된 연주정보에 의거해서 파형데이터를 생성하고, 그 파형데이터를 제3 인터페이스를 통해 입력된 파형데이터와 동기를 취해 혼합하고, 혼합한 파형데이터를 제1 인터페이스에 출력한다. 이와 같이 연주정보에 의거해서 생성한 파형데이터를 제3 인터페이스를 통해 입력된 파형데이터와 동기를 취하여 혼합한 후, 제1 인터페이스를 통해 OS에 인가함으로써, 파형데이터의 생성시간 지연이 조정되어 재생타이밍을 맞출 수 있게 된다.
또, 이 제4 관점의 일실시형태로서 상기 혼합스텝에서는, 제3 인터페이스를 통해 입력된 파형데이터를 초기치로 하고 상기 생성 스텝에서 생성된 파형데이터를 상기 초기치에 누산함으로써 파형데이터를 혼합하는 것이 바람직하다. 왜냐하면, 연주정보에 의거한 파형데이터의 생성타이밍은 병행해서 실행중인 다른 소프트웨어 여부에 따라 변동되므로, 제3 인터페이스를 통해 입력된 파형데이터를 이 연주정보에 의거한 파형데이터 생성시에 혼합하는 것은 곤란하다. 그래서, 제3 인터페이스를 통해 입력된 파형데이터를 이와 같이 파형데이터의 생성시보다 앞에 초기치로 공급해 둠으로써 연주정보에 의거한 파형데이터의 생성타이밍에 좌우되지 않고, 파형데이터를 동기를 취하여 혼합할 수 있게 되므로, 타이밍을 맞춘 파형데이터 재생을 안정하게 수행할 수 있게 된다.
이하, 첨부도면을 참조하여 본 발명의 실시형태를 상세하게 설명하겠다.
도1은 본 발명의 제1관점에 따른 실시형태의 소프트웨어 시스템의 구성예를 개념적으로 나타낸 도면이다.
오퍼레이팅 시스템(OS)으로는, 예를들면 Windows3.1 또는 Windows95(모두 마이크로 소프트사의 상표)를 사용한다. 이 OS는 MIDI 메시지(즉 파형데이터를 생성하는 기초가 되는 연주정보)를 수수하기 위한 제1 인터페이스(IF1)로서 상술한 "MIDI API"를 가지고 있으며, 생성이 끝난 파형데이터를 수수하기 위한 제2 인터페이스(IF2)로서 상술한 "WAVE out API"를 가지고 있다.
MIDI 메시지(즉 파형데이터를 생성하는 기초가 되는 연주정보)를 발생하는 어플리케이션 소프트(APS1)로서, 예를들면 "Director" 스프트가 적용되고 있다. 이 "Director" 소프트는 "Director files"를 구비하고 있으며, 배경음악(BGM)의 연주정보를 MIDI 메시지의 폼으로 리얼타임에 출력한다. 물론, 어플리케이션 소프트는 이것에 한정되지 않으며, MIDI 메시지(즉 파형데이터를 생성하는 기초가 되는 연주정보)를 발생하는 것이라면 어느 것이든 상관없다.
소프트웨어 음원 모듈(SSM)은 MIDI 메시지(즉 파형데이터를 생성하는 기초가 되는 연주정보)를 받아들이기 위한 전용 인터페이스(예를들면 상술한 "SGM MIDI out API")를 가지고 있으며, 받아들인 MIDI 메시지에 의거한 파형데이터를 생성하는 처리를 하며, 생성한 파형데이터를 OS레벨의 상기 제2 인터페이스(IF2)(즉 "WAVE out API")를 통해 출력하는 어플리케이션 레벨의 소프트웨어이다. 이 소프트웨어 음원모듈의 구성예는 예를들면 도23에 나타낸 것과 같아도 상관없다.
도1에서는 OS의 상기 제1 인터페이스(IF1)(즉, "MIDI API")를 통해 인가된 MIDI 메시지(즉 파형데이터를 생성하는 기초가 되는 연주정보)를 받아들이고, 받아들인 상기 MIDI 메시지를 상기 소프트웨어 음원 모듈(SSM)에 인가하도록 프로그램된 의사적 드라이버로서 페이크 MIDI 드라이버(FMD)가 형성된다. 이 페이크 MIDI 드라이버(FMD)는 오퍼레이팅 시스템에 드라이버로서 인스톨된다. 따라서, 어플리케이션 소프트(APS1)로부터 제1 인터페이스(IF1)("MIDI API")를 통해 인가된 MIDI 메시지가 페이크 MIDI 드라이버(FMD)에 의해 받아들여지며, 이 받아들여진 MIDI 메시지는 소프트웨어 음원 모듈(SSM)에 인가된다.
소프트웨어 음원 모듈(SSM)에서는 페이크 MIDI 드라이버(FMD)로부터 인가된 MIDI 메시지를 자기 인터페이스(예를들면 "SGM MIDI out API")를 통해 받아들이며, 상술한 대로 받아들인 MIDI 메시지에 의거해서 파형데이터를 생성하는 처리를 행하고, 생성한 파형데이터를 제2 인터페이스(IF2)(WAVE out API"를 통해 OS에 인가한다.
이렇게 해서 스스로가 어플리케이션 소프트이기도 한 소프트웨어 음원 모듈(SSM)이 별도의 어플리케이션 소프트(APS1)로부터 OS의 "MIDI API"를 통해 인가된 MIDI 메시지를 입력하고, 이것에 의거해서 음파형 데이터 생성처리를 할 수 있다. 따라서, 어플리케이션 소프트인 소프트웨어 음원 모듈(SSM)과 별도의 어플리케이션 소프트(APS1)를 OS 레벨에서 간단히 조합할 수 있다.
소프트웨어 음원 모듈(SSM)에는 종래와 같이 MIDI 메시지를 출력하는 적당한 소프트웨어가 전용으로 조립되어 있어도 된다. 예를들면, 도1의 어플리케이션 소프트(예를들면 가라오케 소프트)(APS2)는 그와 같은 전용 MIDI 메시지 공급소프트의 일예를 나타내고 있다. 소프트웨어 음원 모듈(SSM)에서는 전속 어플리케이션 소프트(APS2)로부터 공급되는 MIDI 메시지도 자기 인터페이스(예를들면 "SGM MIDI out API")를 통해 받아들이며, 상술한 바와 같이 받아들인 MIDI 메시지에 의거해서 파형데이터를 생성하는 처리를 행하고, 생성한 파형데이터를 제2 인터페이스(IF2)(WAVE out API)를 통해 OS에 인가한다. 이에 따라, 종래 공지된 바와 같은 소프트웨어 음원 모듈(SSM)에 전용으로 조립된 소프트웨어(APS2)와, OS를 통해 상기 소프트웨어 음원 모듈(SSM)에 조합되는 별도의 소프트웨어(APS1)에 의해 병행하여 상기 소프트웨어 음원 모듈(SSM)을 이용할 수 있게 된다.
제2 인터페이스(IF2)("WAVE out API")를 통해 OS 레벨에서 받아들인 생성이 끝난 파형데이터는 도22의 종래예와 같이 출력디바이스(OUD)를 통해 외부의 장치, 예를들면 codec 하드웨어(즉 디지털/애널로그 변환기(DAC))에 출력된다.
도2는 본 발명의 제2 관점에 따른 실시형태의 소프트웨어 시스템 구성예를 개념적으로 나타낸 도면이다.
여기서는 어플리케이션 소프트인 소프트웨어 음원 모듈(SSM)이 오퍼레이팅 시스템에 드라이버로서 인스톨되고, 상기 소프트웨어 음원 모듈(SSM)이 OS의 제1 인터페이스(IF1)("MIDI API")를 통해 인가되는 MIDI 메시지를 받아들이도록 프로그램된다. 따라서, 어플리케이션 소프트(APS1)로부터 제1 인터페이스(IF1)("MIDI API")를 통해 MIDI 메시지를 OS를 통해 소프트웨어 음원 모듈(SSM)에 인가할 수 있다. 소프트웨어 음원 모듈(SSM)에서는 받아들인 MIDI 메시지에 의거한 파형데이터 생성처리를 실행하고, 생성한 파형데이터를 제2 인터페이스(IF2)("WAVE out API")를 통해 OS에 인가한다. 따라서, 이 경우에도 스스로가 어플리케이션 소프트이기도 한 소프트웨어 음원 모듈(SSM)이 별도의 어플리케이션 소프트(APS1)로부터 OS 레벨에서 인가되는 MIDI 메시지를 입력하고, 이것에 의거해서 음파형 데이터 생성처리를 할 수 있으며, 생성한 파형데이터를 제2 인터페이스(IF2)("WAVE out API")를 통해 OS에 인가한다. 따라서, 이 경우에도 스스로가 어플리케이션 소프트이기도 한 소프트웨어 음원 모듈(SSM)이 별도의 어플리케이션 소프트(APS1)로부터 OS 레벨에서 인가되는 MIDI 메시지를 입력하고, 이것에 의거해서 음파형 데이터 생성처리를 할 수 있으며, 생성한 파형데이터를 제2 인터페이스(IF2)("WAVE out API")를 통해 OS레벨에서 출력할 수 있다.
도25는 상기 제4의 관점에 따른 실시형태의 소프트웨어 시스템의 구성예를 개념적으로 나타낸 도면이다.
이 시스템에서는 어플리케이션 소프트(APS1)로서 MIDI 메시지 이외에 파형데이터를 MIDI 메시지와 동기하여 발생하는 Multimedia 소프트가 적용되고 있다. 그리고, OS는 "WAVE out API"로서 도2에 나타낸 인터페이스(IF2)("WAVE out API")와는 별도로, OS에 드라이버로서 인스톨된 어플리케이션 소프트인 사운드 모듈(SGM)이 준비한 인터페이스(IF3)(도면 좌측의 "WAVE out API")를 가지고 있다. 어플리케이션 소프트(APS1)로부터 발생한 파형데이터는 이 사운드 모듈(SGM)이 준비한 인터페이스(F3)에서 수수된다.
사운드 모듈(SGM)은 소프트웨어 음원 모듈(SSM)을 내장하고 있으며, 상기 소프트웨어 음원 모듈(SSM)은 도2에 나타낸 시스템에 있어서의 소프트웨어 음원 모듈(SSM)과 같이, 인터페이스(IF1)("MIDI API")를 통해 인가된 MIDI 메시지를 받아들이도록 프로그램되어 있다. 소프트웨어 음원 모듈(SSM)에서는 받아들인 MIDI 메시지에 의거한 파형데이터 생성처리를 실행한다.
또, 사운드 모듈(SGM)은 어플리케이션 소프트(APS1)로부터 인터페이스(IF3)를 통해 인가된 파형데이터와, 소프트웨어 음원 모듈(SSM)이 생성한 파형데이터의 양자를 받아들이고, 받아들인 파형데이터를 누산한 후, 인터페이스(IF2)에 출력하도록 프로그램되어 있다. 따라서, 이 경우에도 스스로가 어플리케이션 소프트이기도 한 사운드 모듈(SGM)이 별도의 어플리케이션 소프트(APS1)로부터 OS레벨에서 인가되는 MIDI 메시지를 입력하여 파형데이터 생성처리를 함과 동시에, 생성한 파형데이터와 어플리케이션 소프트(APS1)로부터 인터페이스(IF3)를 통해 인가되는 파형데이터를 누산한 파형데이터를 인터페이스(IF2)를 통해 OS레벨에서 출력할 수 있다.
다음에, 본 발명의 제1관점에 따른 실시형태의 상세예를 제3관점에 따른 실시형태와 함께 설명하고, 그후에 제2관점에 따른 실시형태와, 제4관점에 따른 실시형태를 설명하기로 한다.
도3은 본 발명에 관한 컴퓨터 소프트웨어를 이용한 음원시스템(18)의 실시에 사용하는 하드웨어 구성예를 나타낸 전체 블록도이다.
이 음원시스템(18)에서는 메인제어부로서 퍼스널컴퓨터의 CPU(중앙처리부)(3)를 사용하고, 이 CPU(3)의 제어하에 소프트웨어 음원 프로그램에 의한 파형데이터 생성처리와 그밖의 프로그램 처리를 병행하여 실행한다. 또, 이하에서는 「악음생성처리」라는 용어도 사용하지만, 이것은 「파형데이터 생성처리」와 실질적으로 같은 뜻이며, 또 「파형데이터 생성처리」뿐만 아니라 이펙트 등의 각종 악음처리를 포함해도 상관없다.
CPU(3)에는 MIDI의 인터페이스(1), 타이머(2), ROM(리드 온리 메모리)(4), RAM(랜덤 액세스 메모리)(5), 마우스(7), 키보드(8), 디스플레이(9), 하드디스크장치(10) 및 DMA(다이렉트 메모리 액세스) 컨트롤러(11)가 데이터 및 어드레스 버스(6)를 통해 접속되어 있다.
DMA 컨트롤러(11)는 악음생성처리의 실행에 의해 생성되어 RMA(5)내의 출력버퍼에 기록된 악음데이터를 DAC(디지털/애널로그 변환기)(12)로부터의 재생 샘플링 클록과 동기하여 1샘플씩 다이렉트 메모리 액세스 방식에 의해 출력버퍼로부터 판독하여 DAC(12)에 보내는 처리(재생처리)를 실행하기 위한 것이다. DAC(12)에서 애널로그 변환된 악음데이터는 사운드 시스템(13)에 보내어지며, 상기 시스템(13)으로부터 음향적으로 발음된다.
하드디스크장치(10)내의 하드디스크에는 OS(여기서는 마이크로 소프트사 제품인 Windows3.1(상표)을 사용하기로 한다)나 유틸리티 소프트라는 소프트웨어외에 소프트음원을 실현하기 위한 소프트웨어(즉 도1 또는 도2의 소프트웨어 음원 모듈(SSM))와, 그 밖의 어플리케이션 소프트(즉 도1 또는 도2의 APS1과 APS2)가 기록되어 있으며, 또 다수 종류의 음색에 대한 1 또는 다수 주기분의 파형데이터군을 미리 기억한 파형데이터 메모리 영역을 포함하고 있다. 페이크 MIDI 드라이버(FMD) 등의 각종 프로그램을 하드디스크장치(10)에 기억해도 되고, 또는 RAM(5) 또는 ROM(4)에 기억해도 된다. 또, 이하의 설명에서는 하드디스크장치(10)내의 파형데이터 메모리에 미리 기억되어 있는 「파형데이터」군과, 소프트웨어 음원 모듈(SSM)의 처리에 의해 MIDI 메시지에 대응하여 이 기억파형 데이터를 이용하여(판독하여) 생성하는 「파형데이터」를 구별하기 위해, 소프트웨어 음원 모듈(SSM)의 처리에 의해 생성하는 순차 샘플점 「파형데이터」를 「악음데이터」라고 하는 경우도 있다.
CPU(3)가 실행하는 프로그램은 하드디스크(10)에 한하지 않고, ROM(4)에서 기억하고 있어도 된다. 하드디스크(10) 또는 ROM(4)에 기억한 프로그램을 RAM(5)에 읽어들임으로써 상기 프로그램의 동작을 CPU(3)에 시킬 수 있다. 이와 같이 하면 동작 프로그램의 추가나 버전업 등을 용이하게 할 수 있다. 착탈 가능한 외부 기록매체의 하나로서 CD-ROM(컴팩트"디스크)(19)를 사용해도 되며, 이 CD-ROM(19)에는 상기와 같이 악음파형데이터 등의 각종 데이터 및 임의의 동작 프로그램을 기억하고 있어도 된다. CD-ROM(19)에 기억되어 있는 동작 프로그램이나 각종 데이터는 CD-ROM 드라이브(14)에 의해 판독되며, 하드디스크(10)에 전송기억시킬 수 있다. 이에 따라 동작프로그램의 신규한 인스톨이나 버전업을 용이하게 할 수 있다. 물론 외부기록매체로 사용할 수 있는 것은 CD-ROM에 한하지 않으며, 플로피 디스크, 광자기 디스크(MO) 등 적당한 것을 사용할 수 있다.
또, 통신 인터페이스(15)를 버스(6)에 접속하고, 상기 통신 인터페이스(15)를 통해 LAN(로컬영역 네트워크)이나 인터넷, 전화회선 등의 통신 네트워크(16)에 접속할 수 있도록 하고, 상기 통신 네트워크(16)를 통해 적당한 서버컴퓨터(17)와 접속되도록 해도 된다. 이에 따라, 하드디스크(10)내에 동작 프로그램이나 각종 데이터가 기억되어 있지 않은 경우, 서버 컴퓨터(17)로부터 상기 동작 프로그램이나 각종 데이터를 받아들여서 상기 하드디스크(10)내에 이것들을 다운로드할 수 있다. 그런 경우, 클라이언트가 되는 시스템(18)으로부터 통신 인터페이스(15) 및 통신 네트워크(16)를 통해 서버 컴퓨터(17)에 동작프로그램이나 각종 데이터의 다운 로드를 요구하는 명령을 송신한다. 서버 컴퓨터(17)는 이 명령을 받아 요구받은 동작 프로그램이나 데이터를 통신 네트워크(16)를 통해 시스템(18)에 배송한다. 시스템(18)에서는 통신 인터페이스(15)를 통해 이들의 동작 프로그램이나 데이터를 수신하고, 하드 디스크(10)에 이것들을 축적함으로써 다운 로드가 완료된다.
또, 본 발명의 실시예에 관한 음원시스템(18)은 시판되는 퍼스널 컴퓨터를 사용하고, 이것에 본 발명에 대응하는 동작프로그램이나 각종 데이터를 인스톨함으로써 실현하도록 해도 된다. 그런 경우에는 본 발명에 대응하는 동작 프로그램이나 각종 데이터를 CD-ROM이나 플로피 디스크 등의 퍼스널 컴퓨터가 읽어 들일 수 있는 기억매체에 기억시킨 상태에서 사용자에게 제공한다. 그 퍼스널 컴퓨터가 LAN 등의 통신 네트워크에 접속되어 있는 경우에는 상술한 바와 같이 상기 통신 네트워크를 통해 동작 프로그램이나 각종 데이터를 상기 퍼스널 컴퓨터에 제공해도 된다.
소프트웨어 음원 모듈(SSM)의 개략 구성은 도23과 같아도 된다. 즉, 도23에 있어서, 「MIDI 출력 드라이버부」는 「음원부」를 구동하기 위한 모듈이며, MIDI 메시지에 따라서 보이스 데이터를 「음원부」 제어용 제어 파라미터로 변환한다. 이 제어 파라미터는 모듈 사이의 소정의 인터페이스(예를들면 "SGM engine API") 경유에 의해 「음원부」에 이송된다. 또, 「MIDI 출력 드라이버부」가 초기화될 때, 상기 파형데이터 메모리의 소요 파일로부터 파형데이터군이 로드되어 적당한 「파형데이터 기억부」에 축적된다. 「음원부」는 이 제어파라미터에 따라 「파형데이터 기억부」에 저장된 파형데이터군을 이용하여(예를들면 소요 피치로 판독하여), MIDI 메시지에 대응하는 소요 피치나 음색 등의 악음 특징을 구비하는 악음데이터를 생성한다.
도1 및 도2에 도시된 「출력디바이스」는 OS레벨의 상기 제2 인터페이스("WAVE out API") 경유하에 소프트웨어 음원 모듈(SSM)로부터 공급되는 악음데이터를 DAC(12)에 보내기 위한 모듈에 상당한다. 상술한 바와 같이, DMA 컨트롤러(11)가 다이렉트 메모리 액세스 방식에 의해 악음데이터를 DAC(12)에 보내도록 되어 있다. 따라서, 「출력디바이스」는 CPU(3)의 제어하에 DMA 컨트롤러(11)에 의한 인터럽트 처리로서 실행된다.
다음에, 이하에 상세히 설명하고자 하는 CPU(3)에 의한 기동제어에 의거한, 소프트웨어 음원 모듈(SSM)에 의한 악음생성처리의 일예의 개요를 도4를 참조하여 설명한다.
어플리케이션 소프트(APS1) 또는 (APS2)의 프로그램이 기동되면 소프트웨어 음원 모듈(SSM)에 MIDI 메시지가 공급되기 시작한다. 이 공급은 상술한 바와 같이, 도1의 시스템 구성에서는 어플리케이션 소프트(APS1)의 출력에 대해서는 제1 인터페이스(IF1)("MIDI API"와 페이크 MIDI 드라이버(FMD)를 경유하여 어플리케이션 소프트(APS2)의 출력에 대해서는 직접적으로 소프트웨어 음원 모듈(SSM)의 입력 인터페이스("SGM MIDI out API")에 대해 이루어진다. 소프트웨어 음원 모듈(SSM)의 입력 인터페이스("SGM MIDI out API")에 대해 MIDI 메시지가 공급되면, 소프트웨어 음원 모듈(SSM)의 「MIDI 출력 드라이버부」(도23)가 기동되고, 각 MIDI 메시지에 따라 보이스 데이터를 제어파라미터로 변환하여 그 제어파라미터 등을 당해 MIDI 메시지에 의거한 발음을 할당한 발음채널용 음원레지스터에 격납한다. 환언하면 이러한 음원레지스터가 소프트웨어 음원 모듈(SSM)의 입력 인터페이스("SGM MIDI out API")의 일구성 요소를 이루고 있다.
소프트웨어 음원 모듈(SSM)의 「음원부」(도23)는 CPU(3) 제어하에 기본적으로는 소정 시간 길이의 구간(프레임이라 함)마다 설정되는 기동기회에 따라 기동되며, 각각 그 직전의 프레임내에 공급된 MIDI 메시지에 의거한 악음생성처리를 각 제어 파라미터에 따라 실행한다(예를들면, 도4에 나타낸 바와 같이 시각T1으로부터 T2까지의 프레임내에 공급된 MIDI 메시지에 의거한 악음생성처리를 시각 T2부터 T3까지의 프레임에서 실행한다). 악음생성처리의 일예로서 파형메모리방식의 악음생성처리에서는 먼저 발음을 할당되어 있는 각 발음채널마다 당해 발음 채널용 음원레지스터에 격납된 제어파라미터에 따른 피치로 RAM(5)으로부터 파형데이터를 판독하고, 그 파형데이터에 음색제어(필터연산)와, 음량제어(음량 인벨로프 데이터의 승산)와, 피치, 음색 또는 음량 등의 변조제어를 제어파라미터에 따라 실시함으로써 당해 발음채널에 대한 소정수 샘플분의 악음데이터를 생성한다. 그리고, 각 발음채널에 대한 악음데이터를 누산하고, 누산한 악음데이터를 (혹은 누산한 악음데이터에 이펙트를 부가하고, 그 악음데이터를) RAM(5)내의 출력버퍼에 기록한다. 그리고, 그 출력버퍼의 재생을 「출력다비이스」에 예약한다. 이 출력버퍼의 재생을 「출력디바이스」에 예약하는 것이, 생성된 악음데이터를 소프트웨어 음원(SSM)으로부터 OS레벨의 제2 인터페이스(IF2)("WAVE out API")에 출력하는 것에 상당한다.
「출력디바이스」는 각 프레임마다 각각 그 직전의 프레임에서 「음원부」에 의해 재생예약된 출력버퍼로부터 1샘플씩 악음데이터를 판독하여 DAC(12)에 보낸다(예를들면, 도4에 나타낸 바와 같이 시각 T2로부터 T3까지의 프레임에서 생성된 악음데이터를 기록되어 재생예약된 출력버퍼로부터 시각 T3에서 T4까지의 프레임에서 악음데이터를 판독한다).
이러한 소프트웨어중 어플리케이션 소프트(APS1) 및/또는 (APS2)의 프로그램의 기동과, MIDI 메시지의 공급에 의거한 「MIDI 출력 드라이버부」의 기동은 리얼타임에 수행된다. 또, 「출력디바이스」는 DMA 컨트롤러(11)에 의한 인터럽트처리로서 강제적으로 기동되므로, 시간적인 지연이 생기지 않는다. 이에 반해, 「음원부」의 기동은 CPU(3) 자신의 내부 인터럽트에 의한 기동명령에 의해 행해지므로, 완전한 멀티 태스크기능을 갖지 않은 OS상에서 이 소프트웨어를 움직였을 경우에는 다른 처리의 영향으로 인해 「음원부」의 기동이 지연됨으로써 발음에 지장이 생기는 경우가 있다. 따라서, 이 음원시스테메에서는 다음과 같은 대책을 강구함으로써 발음에 지장이 생기는 사태를 방지하고 있다.
〔대책1〕
「음원부」를 기동시키는 내부 인터럽트신호(즉 기동명령)를 발생하기 위한 기회를 각 프레임내에서 각각 다수회 설정하고(예를들면 타이머에 의해 정기적으로 설정한다), 소프트음원에서 악음생성처리를 실행해도 좋은 기회에 대응하여 내부 인터럽트신호(즉, 기동명령)를 실제로 발생한다. 내부 인터럽트신호(즉 기동명령)에 의거한 각 기동마다 각각 상기 소정수 샘플분(1출력 버퍼분)의 악음데이터중 10 일부의 악음데이터를 생성함으로써 통산적으로 당해 프레임내에 1출력버퍼분의 악음데이터가 생성되도록 조정을 한다. 그리고, 어느 하나의 기회에 내부 인터럽트신호(즉 기동명령)가 발생되지 않았기 때문에 「음원부」가 기동하지 않는데, 그 결과 악음데이터가 생성되지 않았을 경우에는, 그 미생성 악음데이터를 당해 프레임내의 그 다음의 내부 인터럽트신호가 발생하는 기회에 함께 생성함으로써 당해 프레임 내에서의 1출력 버퍼분의 악음데이터 생성이 확보되도록 조정을 한다.
이와 같이 「음원부」를 기동시키는 내부 인터럽트신호(기동명령)를 발생하는 기회를 각 프레임마다 다수회 형성하고, 이 다수회의 기회중 몇회인가 내부 인터럽트신호(기동명령)이 발행하지 않아도 내부 인터럽트신호(기동명령)가 발생한 기회만큼 당해 프레임내에 1출력 버퍼분의 악음데이터의 생성을 완료하도록 했으므로, 발음에 지장이 생기는 사태가 방지된다.
도5 및 도6은 각각 이 〔대책1〕의 일예를 나타낸 도면이다. 이러한 예에서는 100msec 길이의 프레임내에 「음원부」를 기동하는 내부 인터럽트신호를 10msec 마다의 타이밍(따라서 1프레임내에 합계 10회)에 발생하고, 각 기동마다 각각 1출력 버퍼분의 악음데이터중 10분의 1 양의 악음데이터를 생성하도록 하고 있다.
그리고, 도5의 예에서는 내부 인터럽트신호가 발생하지 않은 타이밍에서의 미생성 악음데이터를 그 직후에 내부 인터럽트신호가 발생한 기회에 모두 생성하도록 하고 있다. 즉, 내부 인터럽트신호가 발생하지 않은 2회째의 기회(도면의 10msec째)에 생성되지 않았던 악음데이터를, 그 직후에 내부 인터럽트신호가 발생한 3회째의 기회(도면의 20msec째)에서의 처리에 의해, 당해 기회에서의 악음데이터와 함께 모두 생성하고(도면에서는 2, 3으로 나타내고 있다), 내부 인터럽트신호가 발생하지 않은 6, 7회째의 기회(도면의 50 및 60msec째)에 생성이 되지 않았던 악음데이터를, 그 직후에 내부 인터럽트신호가 발생한 8회째의 기회(도면의 70msec째)에서의 처리에 의해, 당해 기회에서의 악음데이터와 함께 모두 생성하고 있다(도면에서는 6~8로 나타내고 있다). 이 도5와 같은 처리방식은 미생성분이 이것을 바로 일괄해서 생성하므로, 악음생성 지연이 일어나기 힘들다는 이점을 가진다.
이에 대해, 도6의 예에서는 내부 인터럽트신호가 발생하지 않은 기회에서의 미생성 악음데이터를 그 후에 내부 인터럽트신호가 발생한 다수의 기회에 분산하여 생성하도록 하고 있다. 즉, 내부 인터럽트신호가 발생하지 않은 2, 3회째의 기회(도면의 10, 20msec째)에 생성되지 않았던 악음데이터를, 그 후에 내부 인터럽트신호가 발생한 4, 5회째의 기회(도면의 30 및 40msec째)에서의 처리에 의해, 그들 기회에서의 악음데이터와 함께 각각 분산하여 생성하고 있다(도면에서는 각각 2, 3과 4, 5로서 나타내고 있다). 단, 마지막 10회째 기회(도면의 90msec째)에서는 당해 프레임 내에서의 1출력 버퍼분의 악음데이터 생성을 확보하기 위해 내부 인터럽트신호가 발생하지 않은 7, 8, 9회째의 기회(도면의 60, 70, 80msec째)에 생성되지 않았던 악음데이터를 모두 생성하고 있다. 이 도6과 같은 처리방식은 미생성량이 많은 경우에 이것을 적당히 분산된 회수로 처리하므로, 1회분의 처리시간이 너무 많지 않도록 제어할 수 있어서 CPU의 유효활용에 유리하다.
도6에서는 미생성 악음데이터를 1회 기동의 기회에 생성하는 양의 악음데이터에 분산하고 그 후에 내부 인터럽트신호가 발생한 기회에 생성하고 있으나 이것에 한정되지는 않으며, 미생성 악음데이터를 적당한 양의 악음데이터(예를들면, 1회 기동의 기회에 생성하는 양의 악음데이터나, 1회 기동의 기회에 생성하는 양의 1.5배의 악음데이터나, 1회 기동의 기회에 생성하는 양의 절반의 악음데이터)로 분산하여 그 다음 기회에 생성하도록 해도 된다.
또한, 또다른 예로서 내부 인터럽트신호가 발생하지 않은 기회에서의 미생성 악음데이터를 당해 프레임내의 마지막 기회(도5 및 도6에서는 10회째의 기회)까지 서서히 생성하도록 해도 된다.
도16은 상기와 같이 〔대책1〕의 일예를 나타낸 도면인데, 1회의 내부 인터럽트신호(기동명령)에 대응하여 생성되는 악음데이터의 양이 도5나 도6에 나타낸 바와 같이 1출력버퍼분의 악음데이터중 10분의 1양의 정수배가 된다고는 한정하지 않고, 상기 단위에 대한 단수를 가진 양이 되는 경우가 있을 수 있는 예를 나타낸 것이다.
이 도16의 예에서는 각 내부 인터럽트신호(기동명령)에 대응하는 시점에 있어서, 그 시점까지 생성처리해야 할 악음데이터의 미처리량의 함수로서 상기 시점 1회의 내부 인터럽트신호(기동명령)에 따라 생성해야 할 악음데이터양을 결정하도록 하고 있으며, 도16은 그렇게 해서 결정된 악음데이터양의 일예를 내부 인터럽트신호의 발생 관계로 도시한 도면이다. 동 도면에서는 어느 프레임에서 내부 인터럽트신호가 발생한 1회째의 기회(도면의 0msec째)에, 당해 프레임에 있어서 1출력 버퍼분의 악음데이터중 10분의 1양의 악음데이터를 생성하고 있다. 그리고, 내부 인터럽트신호가 발생하지 않은 2 및 3회째의 기회(도면의 10 및 20msec째) 뒤에, 내부 인터럽트신호가 발생한 4회재의 기회(도면의 30msec째)에, 미생성 악음데이터중 1출력 버퍼분의 악음데이터중 10분의 1.6 양의 악음데이터를 생성하고 있다(따라서 이 기회까지 통산적으로 당해 프레임에 있어서 1출력버퍼분의 악음데이터중 10분의 2.6 양의 악음데이터를 생성하게 되는데, 도면에서는 이것을 2.6으로 나타내고 있다).
계속해서, 내부 인터럽트신호가 발생한 5회째의 기회(도면의 40msec째)에 1출력버퍼분의 악음데이터중 10분의 1.5 양의 악음데이터를 생성하고(따라서 이 기회까지 통산적으로 1출력 버퍼분의 악음데이터중 10분의 4.1양의 악음데이터를 성생하게 되는데, 도면에서는 이 것을 4.1로 나타내고 있다), 내부 인터럽트신호가 발생한 6회째의 기회(도면의 50msec째)에, 1출력 버퍼분의 악음데이터중 10분의 1.4 양의 악음데이터를 생성하고 있다(따라서 이 기회까지 통산적으로 1출력 버퍼분의 악음데이터중 10분의 5.5 양의 악음데이터를 생생하게 되는데, 도면에서는 이 것을 5.5로 나타내고 있다). 그리고, 내부 인터럽트신호가 발생한 7 및 8회째의 기회(도면의 60, 70msec째) 다음, 내부 인터럽트신호가 발생한 9회째의 기회(도면의 80msec째)에, 1출력 버퍼분의 악음데이터중 10분의 1.7 양의 악음데이터를 생성하고 있다(따라서 이 기회까지 통산적으로 1출력 버퍼분의 악음데이터중 10분의 7.2 양의 악음데이터를 생생하게 되는데, 도면에서는 이것을 7.2로 나타내고 있다). 계속해서, 내부 인터럽트신호가 발생한 10회째의 기회(도면의 90msec째)에, 1출력 버퍼분의 악음데이터중 10분의 1.6 양의 악음데이터를 생성하고 있다(따라서 1프레임내에 통산적으로 당해 프레임에 있어서의 1출력 버퍼분의 악음데이터중 10분의 8.8 양의 악음데이터를 생생하게 되는데, 도면에서는 이 것을 8.8로 나타내고 있다).
그리고, 다음 프레임에서 내부 인터럽트신호가 발생한 1회째의 기회(도면의 100msec째)에, 직전의 프레임에 있어서 나머지 미생성 악음데이터인 1출력 버퍼분의 악음데이터중 10분의 1.2 양의 악음데이터와, 금회의 프레임에 있어서 1출력 버퍼분의 악음데이터중 10분의 0.3 양의 악음데이터를 생성하고 있다(도면에서는 이 것을 10.3으로 나타내고 있다). 이 단계에서 1출력 버퍼분을 초과하는 악음데이터가 생성되게 되므로, 그 중 1출력 버퍼분의 악음데이터양에 상당하는 10분의 1.0 양의 악음데이터에 대해서는 생성이 끝난 악음데이터군으로부터 끄집어내서 「출력디바이스」에 공급하여 재생예약하기로 한다. 따라서, 생성중인 악음데이터로서 1출력 버퍼분의 악음데이터중 10분의 0.3양의 악음데이터가 남겨지게 된다.
계속해서, 내부 인터럽트신호가 발생한 2회째의 기회(도면의 110msec째)에, 금회의 프레임에 있어서 1출력 버퍼분의 악음데이터중 10분의 1.4 양의 악음데이터를 생성하고(따라서 이 기회까지 통산적으로 1출력 버퍼분의 악음데이터중 10분의 1.7 양의 악음데이터를 생성하게 되는데, 도면에서는 이것을 1.7로 나타내고 있다), 이하 마찬가지로 내부 인터럽트신호가 발생한 기회마다 악음데이터를 생성해 나간다. 또, 추후 상세하게 설명하는 바와 같이 결정된 생성해야 할 악음데이터양이 소정의 상한치 SRmax를 초과할 경우에는 상기 상한치 SRmax 범위내에 들어가도록 제어된다.
이와 같이, 도16의 예에서는 소프트 타이머에 의한 내부 인터럽트신호가 발생할 때마다 그때까지 생성되지 않은 악음데이터양의 함수로서, 악음생성처리에 요하는 시간이 그다지 길어지지 않는 일정 범위내에서 악음데이터의 생성량을 결정하고, 그 양만큼 악음데이터를 생성하는 처리를 실행한다. 내부 인터럽트신호가 발생할 때마다 이러한 처리가 실행됨에 따라 미생성 악음데이터가 서서히 생성되어 나가게 된다. 즉, 이 방식은 내부 인터럽트신호의 발생을 기동요인으로 해서 악음생성처리를 실행하는 점에서는 도5, 도6의 예와 같기 때문에 이들 예와 같은 효과를 기대할 수 있다. 한편, 미생성 악음데이터를 한 번에 모두 생성하지 않고 소정 함수에 따라 서서히 생성해 나간다는 점에서 그것들과는 다르며, 그 점에서 특유의 효과를 가진다. 즉, CPU(3)가 소프트웨어 음원 모듈(SSM)에 의한 악음생성처리를 위해 장시간 연속해서 독점되는 경우는 없으므로, CPU(3)에서 다른 소프트웨어의 프로그램을 병행하여 실행하는 경우나 소프트웨어 음원 모듈(SSM)에 있어서 우선도가 낮은 다른 처리를 하는 요구가 발생했을 경우, 그들의 처리로 비교적 신속하게 이행시킬 수 있으므로, 자원의 효율적인 이용을 도모할 수 있다.
즉, 예를들면 도5와 같은 방식에서는 미생성 악음데이터의 생성을 가장 조기에 할 수 있다는 점에서는 뛰어나지만, 내부 인터럽트신호가 몇회나 연속적으로 발생하지 않았을 경우에는, 그 직후에 내부 인터럽트신호가 발생한 기회에서의 악음데이터 생성량이 커진다. 이와 같이 생성량이 커지면 1회의 기동으로 소프트웨어 음원 모듈(SSM)에 의한 악음생성처리를 하기 위해 CPU(3)가 소비해야 하는 시간이 길어지며, 따라서, CPU(3)가 소프트웨어 음원 모듈(SSM)에 의한 악음생성처리의 실행을 위해 징시간 연속해서 독점되게 되므로, 그 실행중에 소프트웨어 음원 모듈(SSM)에 의한 악음생성처리보다 우선순위가 낮은 처리의 기동요인이 발생해도 CPU(3)가 그것들의 처리를 좀처럼 실행할 수 없게 되는 경우가 있다. 또, 그와 같이 1회분의 악음데이터 생성량이 커지면, 연산가능시간이 너무 작은 경우에는, 악음데이터를 생성가능한 발음채널수가 극단적으로 감소되는 경우가 있다. 이에 대해, 도16과 같은 방식을 채용하면 그러한 문제점을 해결할 수 있다. 따라서, 이하에 상세하게 설명하는 실시예에서는 도16과 같은 방식에 따라 처리하는 예에 대해 설명하기로 한다.
그러나, 내부 인터럽트신호가 발생하지 않은 기회가 많아지면, 그 후의 내부 인터럽트신호가 발생한 기회에 악음생성처리를 할당되어 있는 모든 발음 채널에 대해 악음데이터를 다 생성할 수 없게 되는 경우가 있다. 그래서, 상기 〔대책1〕에 있어서, 그와 같은 기회에는 악음데이터를 생성하는 발음채널수를 감소시킴으로써 악음데이터의 생성을 확보하도록 하는 것이 바람직하다. 악음데이터를 생성하는 발음채널수를 감소시켜야 하는 빈도는 도5 예의 경우가 가장 높으며, 도6 예의 경우나 미생성 악음데이터를 당해 프레임내 마지막 기회까지 서서히 생성할 경우, 혹은 도16 예의 경우에는, 도5 예의 경우보다 낮아진다(단, 미생성 악음데이터의 생성을 조기에 행한다는 관점에서는 도5 예가 가장 바람직하다).
〔대책2〕
각 발음 채널용 음원 레지스터로서 발음채널이 사용되지 않았을 때 할당한 악음생성처리를 제어하는 파라미터를 격납하기 위한 제1 음원레지스터(외부 음원 레지스터)와, 당해 발음채널이 사용중이 되었을 때 할당한 새로운 악음생성처리를 제어하는 파라미터를 격납하기 위한 제2 음원 레지스터(내부 음원 레지스터)를 형성한다. 그리고, 당해 발음채널에서 사용해야 할 음원 레지스터로서 새로운 악음생성처리를 개시해야 할 타이밍까지는 외부 음원레지스터를 선택하고, 상기 타이밍 이후에는 외부 음원 레지스터 대신 내부 음원 레지스터를 선택한다.
이에 따라, 현재 사용중인 발음채널에 새로운 악음생성처리를 할당했을 경우에는 외부 음원레지스터를 이용하여 당해 발음 채널에서의 현재의 악음생성처리의 실행을 확보하면서, 당해 발음채널에서의 새로운 악음생성처리를 바로 내부 음원레지스터에 준비할 수 있다. 따라서, 악음생성처리의 준비 지연을 원인으로 하는 악음데이터의 생성 지연을 방지할 수 있다.
[대책3〕
RAM(5)내에 다수의 출력버퍼 영역을 형성해 두고, 「음원부」의 기동에 선행하여 그중 일부의 출력버퍼의 재생을 「출력디바이스」에 예약해 둔다. 이에 따라, 다른 처리의 영향으로 인해 각 프레임에서 기동해야 할 「음원부」가 당해 프레임내에서 기동하지 않더라도 선행하여 재생예약한 출력버퍼의 재생처리가 모두 완료되기까지 「음원부」가 기동하여 출력 버퍼의 재생이 예약되면 악음 재생시 음의 단절이 생기지 않게 된다. 따라서, 음의 단절을 일으키지 않기 위한 악음생성처리의 기동시간 지연의 허용범위가 넓어진다.
도7은 이 〔대책3〕의 일예를 나타낸 도면이다. 이 예에서는 「음원부」의 기동에 선행하여 4개의 출력버퍼 재생을 「출력 디바이스」에 예약하고 있다. 그리고, 프레임(F1)의 개시시에는 그보다 앞의 프레임에서 1출력버퍼분의 재생처리가 완료됨으로써 예약수가 3이 되고 있으나, 프레임(F1)의 도중에 1출력 버퍼분의 악음데이터 생성이 완료되어 그 출력버퍼가 재생 예약되었기 때문에 예약수가 4로 증가하고 있다. 그리고, 프레임(F1) 종료시에 다음의 1출력버퍼분의 재생처리가 완료됨으로써 예약수는 3으로 감소하지만, 프레임(F2) 도중에 다음 1출력 버퍼분의 악음데이터 생성이 완료되어 그 출력버퍼가 재생 예약되었기 때문에 예약수는 4로 증가하고 있다.
그리고, 그 후 「음원부」의 기동 지연으로 인해 악음데이터가 생성되지 않기 때문에 프레임(F4) 종료시에는 예약수가 1로 감소하고 있다. 그리고, 프레임(F5)에서 재생예약이 끝난 마지막 출력버퍼(프레임(F2) 도중에 재생예약한 출력버퍼)가 판독(도면에서는 이 재생예약과 판독의 관계를 분명히 하기 위해 프레임(F2) 도중에 재생예약의 발생을 굵은 화살표로 표시하고, 프레임(F5)은 사선으로 표시했다)되고 있으나, 프레임(F5) 도중에 1출력 버퍼분의 악음데이터 생성이 완료되어 그 출력버퍼가 재생예약되었기 때문에 예약수는 2로 증가하고 있다. 그리고, 그 후에도 재생처리의 완료와 재생 예약의 발생에 따라 예약수는 증감하고 있다.
이와 같이, 각 프레임에서 기동해야 할 「음원부」가 당해 프레임내에서 기동하지 않더라도 선행하여 재생 예약한 4개의 출력 버퍼의 재생처리가 모두 완료될 때까지 「음원부」가 기동하여 출력버퍼의 재생이 예약되면 악음 재생에 지연이 생기지 않게 된다.
또, 예약수가 4일 때 프레임 도종에 다음 1출력 버퍼분의 악음데이터 생성이 완료되었을 경우에는 당해 프레임에서의 재생 처리의 완료를 기다려서 출력 버퍼의 재생 예약을 행함으로써, 예약수가 4를 초과하지 않도록 한다.
이 〔대책3〕을 실시하기 위해 RAM(5)내에 형성해 두어야 할 출력 버퍼의 수는 「음원부」 기동에 선행하여 재생예약하는 출력버퍼의 수와, 「음원부」에서 생성을 완료한 악음데이터를 기록하기 위한 하나의 출력버퍼와, 「음원부」에서 생성한 악음데이터양이 1출력 버퍼분을 초과한 경우를 위한 예비 출력버퍼의 합계(도7의 예에서는 6개)가 된다. 단, 「음원부」에서 생성한 악음데이터의 양이 1출력 버퍼분을 초과한 경우에는 생성을 스톱하도록 하면 예비 출력버퍼는 불필요해진다(따라서, 도7의 예에서는 5개로 충분하게 된다).
[대책4〕
소정 시간내에 「출력디바이스」에 출력버퍼가 재생 예약되어 있지 않을 경우, 그 타이밍에 생성 완료할 예정인 악음데이터의 생성을 중단하고, 그 타이밍에 생성 개시하는 악음데이터로부터 생성동작을 새로 개시한다. 이에 따라 재생예약이 맞지 않아 일시적으로 악음이 흩어진 경우에도 바로 안정된 악음생성동작으로 복귀하여 노이즈를 최소한으로 억제할 수 있다.
예를들면, 상술한 〔대책3〕의 도7예에서는 선행하여 「출력 디바이스」에 재생 예약한 출력버퍼의 재생 처리가 모두 완료되기 까지 「음원부」에서 생성을 완료한 악음데이터를 기록한 출력버퍼가 재생 예약되어 있다. 그러나, 다른 처리의 영향으로 인해 「음원부」의 기동이 대폭적으로 지연되었을 경우에는 선행하여 재생예약한 출력버퍼의 재생처리가 모두 완료된 구간내에서도 「음원부」에서 생성을 완료한 악음데이터를 기록한 출력버퍼가 아직 재생예약되어 있지 않은 경우(예약수가 0이 되는 것)도 일어날 수 있다. 그와 같은 경우에도 〔대책3〕 및 〔대책4〕를 함께 실시하면 예약수가 0이 되었을 경우, 그 타이밍에 생성 완료될 예정인 악음데이터의 생성이 중단되어 「출력 디바이스」에 출력버퍼 재생의 선행예약을 다시 한 후, 그 타이밍에서 생성 개시하는 악음데이터로부터 생성동작이 새로이 개시된다.
다음에, 이상과 같은 대책의 실시를 포함한 이 컴퓨터 소프트웨어를 이용한 음원시스템의 실시예를 도8 이하를 참조하며 설명한다. 먼저, 처음에 도1의 시스템구성에 대응하는 실시예(즉, 페이크 MIDI 드라이버(FMD)를 사용하는 예)에 대해 설명한다.
도8은 CPU(3)에 의해 실행되는 소프트웨어 음원 모듈(SSM) 프로그램의 메인 루틴을 나타낸 플로우챠트이다. 처음에 「초기설정」(스텝S1)을 실행한다. 「초기설정」에서는 도9에 나타낸 바와 같이, 처음에 각 발음채널용 음원 레지스터(〔대책2〕로 설명한 바와 같이, 외부 음원레지스터와 내부 음원 레지스터가 형성되어 있다)내의 데이터와, RAM(5)의 워크영역(이 워크영역내에는 〔대책3〕으로서 설명한 바와 같이, 다수의 출력버퍼 영역이 포함되어 있다)내의 데이터를 모두 클리어한다(스텝S21). 계속해서, 하드디스크장치(10)내의 하드디스크에 기록되어 있는 파형데이터를 RAM(5)에 로드한다(스텝S22). 계속해서, 「출력디바이스」를 초기설정하고(스텝S23), 〔대책3〕로서 설명한 바와 같이, 「음원부」의 기동에 선행하여 데이터를 클리어된 몇 개(여기서는 도7의 예와 같이 4개로 한다)의 출력 버퍼 재생을 「출력디바이스」에 예약한다(스텝S24). 계속해서, DAC(12)로부터 재생 샘플링 클록을 발생시켜서 DMA 컨트롤러(11)에 인가함으로써 「출력디바이스」를 기동함과 동시에, 「음원부」를 기동하는 내부 인터럽트신호(기동명령)를 발생하기 위한 소프트 타이머(예를들면, 하드적으로 구성한 타이머를 CPU(3)가 참조함으로써 내부 인터럽트신호를 발생하도록 한 것)를 스타트시킨다(스텝S25).
소프트 타이머는 이 내부 인터럽트신호(기동명령)를, 상기 〔대책1〕로서 설명한 바와 같이, 각 프레임마다 각각 다수의 기회에 발생 가능하다(여기서는 도5, 도6, 도16의 예와 같이, 100msec 길이의 프레임내에 10msec마다 합계 10회의 기회에 발생하는 것이 가능한 것으로 한다). 또, 상술한 바와 같이 소프트 타이머에 의한 내부 인터럽트신호(기동명령)는 각 기동기회(즉 10msec마다)에 반드시 발생된다고 한정하지는 않으며, 기동기회가 도래해도 CPU(3)가 OS 처리나 다른 소프트웨어의 처리에 점유되어 있을 때에는 소프트웨어 음원 모듈(SSM)에 대한 내부 인터럽트신호(기동명령)를 가할 수 없다. 그것을 위한 기동명령 발생수단의 구성으로는, 예를들면 타이머(2)에서 1회의 기동기회에 대응하는 소정 시간(예를들면 10msec)을 계시할 때 마다 플래그를 세우도록 하고, CPU(3)가 소프트음원의 처리를 실행해도 되는 상태일 때, 이 플래그의 유무를 체크하도록 하여, 미처리 플래그가 서 있으면 내부 인터럽트신호(기동명령)를 발생하도록 함과 동시에 그 플래그를 소거하도록 한다.따라서, 1회의 기동기회에 대응하는 소정 시간(예를들면 10msec) 사이에 CPU(3)가 소프트음원의 처리를 할 여유가 있을 경우에는 1회의 내부 인터럽트신호(기동명령)가 발생된다. 그러나, 1회의 기동 기회에 대응하는 소정 시간(예를들면 10msec) 사이에 CPU(3)가 소프트음원의 처리를 하는 여우가 없을 경우에는 플래그 체크로 나아가지 못하므로, 내부 인터럽트신호(기동명령)가 발생되지 않으며, 소정 시간이 경과되어 버려서 다음 플래그는 서 버린다. 즉, 앞의 플래그에 대응하여 내부 인터럽트신호(기동명령)가 발생되는 경우는 없다. 이리하여 내부 인터럽트신호(기동명령)는 도5, 도6, 도16에 예시된 바와 같이 각 기동기회마다 반드시 발생된다고는 한할 수 없게 된다. 또, 상기에서 이해할 수 있는 바와 같이, 내부 인터럽트신호(기동명령)가 몇 개의 각 기동기회에 연속적으로 발생되는 경우에도 그 발생시간 간격은 정확한 상기 소정 시간(예를들면 10msec)은 되지 않아 10msec 전후에 적당한 변동이 있다. 즉, 내부 인터럽트신호(기동명령)의 미시적인 발생타이밍은 CPU(3)의 처리상태(언제 타이머 플래그를 보러 갈 지)에 의존하고 있기 때문이다.
도8로 돌아가서 초기설정을 끝내면 디스플레이(9)에 처리 진행에 따른 정보를 표시하거나, 마우스(7)를 사용해서 각종 제어데이터를 입력하기 위한 패널(도시생략)을 표시한다(스텝S2). 또, 「음원부」의 기동에 선행하여 「초기설정」(도9)에서 출력버퍼를 「출력디바이스」에 재생 예약하고 있으므로, 「출력디바이스」에서는 이 선행예약한 4개의 출력버퍼에 대한 재생처리가 완료되고 나서, 「음원부」에서 그 후에 재생예약한 출력버퍼에 대한 재생처리를 실행한다. 따라서, MIDI 메시지가 공급되고 나서 악음이 재생되기 까지의 시간이 이 선행예약한 출력 버퍼수와 같은 수의 프레임분(도7의 예에서는 4프레임분)만큼 길어지게(늦어진다) 된다. 따라서, 디스플레이(9) 패널에 MIDI 메시지 공급에 의거한 표시를 할 때에는 표시 타이밍을 이 프레임분 만큼 나중에 편의되도록 하는 것이 바람직하다.
스텝S2에 이어지는 스텝S3에서는 하기의 각 기동요인의 발생을 체크한다.
기동요인①:「소프트웨어 음원 모듈의 API」(예를들면 "SGM MIDI out API", 이하 이것을 「소프트음원API」라 한다)를 통해 MIDI 메시지가 공급된 것(즉, 어플리케이션 소프트(APS1) 또는 (APS2)(도1 참조)로부터 MIDI 메시지가 공급된 것).
기동요인②:소프트 타이머에 의해 「음원부」를 기동하는 내부 인터럽트신호(기동명령)가 발생한 것. (이 발생 타이밍은 상기와 같이 소정 시간 즉 10msec마다 인터럽트를 넣은 것을 목표로 하고는 있으나, 반드시 그대로 정확하게 발생되는 것은 아니다).
기동요인③:「출력디바이스」로부터의 처리요구가 검출된 것.
기동요인④:그밖의 요구(패널의 입력이벤트나 키보드(8)의 코맨드 입력 이벤트(메인 루틴 종료 코맨드는 제외)가 검출된 것.
기동요인⑤:키보드(8)의 메인 루틴 종료 코맨드의 입력 이벤트가 검출된 것.
계속해서, 상기 기동요인중 어느 하나가 발생되었는지의 여부를 판단한다(스텝S4). NO이면 스텝S3로 복귀하여, 어느 하나의 기동요인이 발생할 때까지 스텝S3 및 스텝S4의 처리를 반복한다. 그리고, 어느 하나의 기동요인이 발생하면 스텝S4에서 YES가 되어 스텝S5로 진행한다. 스텝S5에서는 어떤 기동요인이 발생했는지를 판정한다. 이후 발생한 기동요인에 따른 처리를 행한다.
여기서, 기동요인①을 일으키는 다른 소프트웨어의 프로그램예에 대해 도17 및 도18을 참조해서 설명한다.
도17은 페이크 MIDI 드라이버(FMD)(도1)의 프로그램예를 나타낸다. 이 페이크 MIDI 드라이버(FMD)(도1)의 프로그램은 어플리케이션 소프트(APS1)(도1)로부터 OS의 제1 인터페이스(IF1)(즉,"WAVE API")에 MIDI 메시지가 인가되었을 때 기동된다. 여기서, 어플리케이션 소프트(APS1)(도1)로부터 출력되는 MIDI 메시지는 1 내지 16채널의 MIDI 채널번호정보를 포함하는 것으로 한다. 스텝S220에서는 상기 제1 인터페이스(IF1)(즉, "WAVE API")에 입력된 MIDI 메시지의 MIDI 채널번호정보를 17 내지 36채널로 변환하는 처리를 한다. 이것은 이 예에서는 소프트웨어 음원을 1 내지 36채널 구성(32파트 구성)으로 하고, 그 중 1 내지 16 채널을 상기 소프트웨어 음원에 전용 어플리케이션 소프트(APS2)(도1)에 할당하고, 나머지 17 내지 36 채널을 페이크 MIDI 드라이버(FMD)를 개재시킨 별도의 어플리케이션 소프트(APS1)에 할당하도록 했기 때문이다. 따라서, 소프트웨어 음원을 페이크 MIDI 드라이버(FMD)를 개재시킨 어플리케이션 소프트(APS1)만으로 이용할 경우에는 스텝S220의 처리는 불필요하다.
스텝S221에서는 상기 제1 인터페이스(IF1)(즉"WAVE API")를 통해 받아들인 스텝S220에서 채널번호 변환처리가 끝난 MIDI 메시지를 「소프트음원 API」(소프트웨어 음원 모듈(SSM)의 API)에 전송하는 처리를 한다. 이 전송에 따라 소프트웨어 음원 모듈(SSM)은 상기 기동요인 ①이 발생했다고 판단한다.
도18은 소프트웨어 음원에 전용 어플리케이션 소프트(APS2)(도1)에 있어서의 MIDI 이벤트 처리의 프로그램예를 나타낸다. 이 MIDI 이벤트처리는 상기 어플리케이션 소프트(APS2) 실행중에 MIDI 이벤트가 발생했을 때 실행된다. 즉, 스텝S230에서는 발생한 MIDI 이벤트에 관한 MIDI 메시지를 「소프트음원 API」(소프트웨어 음원 모듈(SSM)의 API)에 입력하는 처리를 한다. 이 입력에 따라 소프트웨어 음원 모듈(SSM)에서는 상기 기동요인 ①이 발생했다고 판단한다.
이와 같이 소프트웨어 음원에 전속 어플리케이션 소프트(APS2)와, OS레벤에서 상기 소프트웨어 음원에 조합되는 어플리케이션 소프트(APS1)의 2개의 어플리케이션 소프트로부터의 MIDI 메시지의 공급에 따라 상기 기동용인 ①이 발생된다. 소프트웨어 음원에서는 1 내지 36 채널을 상기와 같이 잘 구별하여 2개의 어플리케이션 소프트에 의거한 악음생성처리를 병행하여 행한다.
또, MIDI 채널번호의 변환형태는 상기 예에 한하지 않으며, 다른 형태여도 상관없다. 예를들면, 소프트웨어 음원의 1 내지 36채널중 1 내지 16 채널을 페이크 MIDI 드라이버(FMD)를 개재시킨 별도의 어플리케이션 소프트(APS1)에 할당하고, 나머지 17 내지 36 채널을 상기 소프트웨어 음원에 전용 어플리케이션 소프트(APS2)(도1)에 할당하도록 해도 되는데, 그런 경우에는 도17의 스텝S220에 나타낸 바와 같은 채널번호 변환처리를 도18의 프로그램에서 행하도록 한다.
도8로 돌아가서, 스텝S5에서 기동요인 ①이 발생한 것이 판정되면 스텝S6으로 가서 MIDI처리를 실행한다. 그리고나서 스텝S7로 가서 소정의 수신표시(예를들면 어떤 MIDI 채널에 대한 MIDI 메시지가 공급되었는지의 표시 등)를 패널상에 수행한다. 그리고, 스텝S3으로 돌아가서 스텝S3 이하의 처리를 반복한다.
스텝S6에서 실행하는 MIDI처리에는 예를들면 노트 온에 의거한 노트 온 이벤트처리나 노트 오프에 의거한 노트오프 이벤트 처리 등이 포함된다. 도10은 노트 온 이벤트 처리의 일예를 나타낸 플로우차트이다. 최초로 노트 넘버, 속도, 노트 온을 입력한 MIDI채널을 수신하는 파트의 파트번호, MIDI 메시지의 입력시각을 나타낸 시간축상에서 노트 온 이벤트가 발생한 시각을 나타내는 데이터를 각각 소정의 레지스터 NN, VEL, p, TM에 격납한다(스텝S31). 계속해서 당해 노트 온에 의거한 발음의 할당처리를 행하고, 할당한 발음채널의 채널번호를 레지스터(i)에 격납한다(스텝S32). 계속해서, 레지스터(p)내의 파트번호에 대응하여 선택되어 있는 음색의 보이스 데이터를 RAM(5)으로부터 판독하고, 그 보이스 데이터를 레지스터 NN, VEL내의 노트 넘버, 속도에 따라 「음원부」 제어용 제어파라미터(피치를 지정하는 주파수 넘버(FN)를 포함한다)로 변환한다(도2 참조)(스텝S33).
계속해서, 이 제어파라미터를 노트 온 및 레지스터(TM)내의 발생시각의 데이터와 함께, 레지스터(i)내 채널번호의 발음채널용 음원레지스터에 격납함으로써 당해 발생시각에 따른 타이밍에서의 노트 온 예약을 행한다(스텝S34).
레지스터(TM)내의 발생시각의 데이터를 음원레지스터에 격납하는 것은 다음과 같은 이유 때문이다. 노트 온 이벤트의 발생시각과, 당해 노트 온 이벤트에 의거한 악음이 재생되는 시각에는 상술한 바와 같이 약 4프레임분의 시간차가 있다(악음재생이 그만큼 지연된다). 악음생성처리(후술하는 「음원처리1」)는 그 시간차 범위내의 임의의 타이밍에 대응하는 악음데이터를 생성하면 된다(즉, 그 범위 내에서의 처리 지연이 허용되어 있다). 따라서, 노트 온 이벤트의 발생시각과 다른 임의의 타이밍에서 실행되는 악음생성처리는 노트 온 이벤트의 발생시각을 모르면 대응하는 악음데이터를 생성할 수 없기 때문이다.
또, 스텝S34에 있어서, 당해발음채널이 사용중이면 〔대책2〕에서 설명한 바와 같이, 당해 발음채널용 외부 음원레지스터와 내부 음원레지스터 중 내부 음원레지스터에 제어파라미터 등을 격납한다. 이에 따라 외부 음원레지스터를 이용해서 당해 발음채널에서의 현재 악음생성처리의 실행을 확보하면서 당해 발음채널에서의 새로운 악음생성처리를 바로 내부의 음원레지스터에 준비할 수 있다. 또, 이와 같이 내부의 음원레지스터에 격납을 하였을 경우에는 외부의 음원레지스터내의 예약 영역에도 레지스터(TM)내의 발생 시각에 따른 타이밍에서의 덤프(음량 인벨로프를 급격히 감소시키는 처리)의 예약을 한다.
스텝S34에 이어지는 스텝S35에서는 노트 온의 발생시각이 늦은 발음채널순으로 악음생성연산이 행해지도록, 발음의 할당처리를 한 각 발음채널 사이에서의 연산순서를 결정한다(즉, 후착 노트 온에 대응하는 발음채널이 악음 생성시 우선적으로로 처리되게 된다). 그리고 리턴한다.
도11은 노트 오프 이벤트처리의 일예를 나타낸 플로우차트이다. 먼저 노트 넘버, 노트 오프를 입력한 MIDI 채널을 수신하는 파트에 대응하여 선택되고 있는 음색, MIDI 메시지의 입력시각을 나타낸 시간축상에서 노트 오프 이벤트가 발생한 시각을 나타낸 데이터를 각각 소정의 레지스터 NN, t, TM에 격납한다(스텝S41). 계속해서 레지스터(t)내 음색에서의 발음을 할당한 발음채널을 찾아 그 발음채널의 채널번호를 레지스터(i)에 격납한다(스텝S42). 계속해서 레지스터(i)내의 채널번호의 발음채널용 외부 음원레지스터와 내부 음원레지스터중 레지스터(t)내의 음색에 대응하는 쪽의 음원레지스터내의 예약영역에 레지스터(TM)내의 발생시각에 따른 타이밍에서의 노트 오프 예약을 한다(스텝S43). 그리고 리턴한다.
도8의 설명으로 돌아가서, 스텝S5에서 기동요인 ②가 발생하고 있음이 판정되면 「음원처리1」을 실행하고(스텝S8), 그리고 나서 소정의 상태표시(예를들면, CPU(3)의 연산능력이나 생성한 악음의 음량레벨 등의 표시)를 패널상에 행한다(스텝S9). 그리고, 스텝S3으로 돌아가서 스텝S3 이하의 처리를 반복한다.
「음원처리1」은 상술한 「음원부」의 일부를 이루는 것이다. 이 「음원처리1」의 상세예는 도12에 나타나 있다.
도12에 있어서, 최초의 스텝S50에서는 MIDI 메시지의 입력시각을 나타낸 시간축상에서의 현재의 시각(GT)로부터 그 시간축상에서의 MIDI 메시지의 입력시각중 당해 MIDI 메시지에 의거한 악음생성처리가 종료되어 있지만 최종 입력시각(ST)을 감한 시간을 지연량(OR)(현시점까지 생성해야 할 악음데이터이면서 미생성인 악음데이터양을 시간 길이로 나타낸 것)으로 설정한다. 계속되는 스텝S51에서는 생성량(SR)(금회의 1기동에서 생성해야 할 악음데이터의 목표샘플수를 시간길이로 표현한 것)을 지연량(OR)의 함수로서 결정한다.
도19는 이 함수특성의 일예를 나타낸 도면이다. 이 예에서는 지연량(OR)이 일정 미만인 경우에는 생성량(SR)은 10msec(1출력 버퍼분의 악음데이터중 10분의 1에 대응하는 시간)이지만, 지연량(OR)이 일정 이상이 되면 지연량(OR)이 증가함에 따라 생성량(SR)이 연속적으로 증가되어 나간다. 그리고, 생성량(SR)이 악음생성처리에 요하는 시간이 너무 길어지지 않는 범위내의 일정한 상한치(SRmax)에 도달하면 지연량(OR)이 그 이상 증가해도 생성량(SR)은 상한치(SRmax)를 유지한다. 상한치(SRmax)는 예를들면 20msec여도 되고, 혹은 그 이외의 값이어도 된다.
도20은 이 함수 특성의 또다른 일예를 나타낸 도면이다. 이 예에서는 지연량(OR)이 일정 미만인 경우에는 생성량(SR)은 10msec이지만, 지연량(OR)이 일정 이상이 되면 지연량(OR)이 증가함에 따라서 생성량(SR)이 불연속적으로 증가되어 나간다. 그리고, 생성량(SR)이 악음생성처리에 요하는 시간이 그다지 길어지지 않는 범위내의 일정한 상한치(SRmax)에 도달하면 지연량(OR)이 그 이상 증가해도 생성량(SR)은 상한치(SRmax)를 유지한다.
또, 이렇게 해서 결정되는 생성량(SR)은 10msec를 단위로 해서 그 정수배의 값만을 취하는 것이 아니라, 상기 단위에 대한 단수를 가진 값을 취할 수 있다. 따라서, 1회의 「음원처리1」의 실행에 의해 생성되는 악음데이터양은 1출력버퍼분의 악음데이터중 10분의 1양의 정수배가 된다고는 한정하지는 않으며, 도16에 나타낸 바와 같이, 상기 단위에 대한 단수를 가진 양이 되는 경우가 있을 수 있다. 즉, 이 도12의 「음원처리1」은 도16에 나타낸 바와 같은 형태로 악음생성처리를 하는 것이다. 따라서, 상술한 바와 같이 1프레임내의 소정의 기동기회에 몇번 내부 인터럽신호(기동명령)가 발생하지 않았다고 해도 실제로 내부 인터럽트신호(기동명령)이 발생한 기회 만큼 당해 프레임내에서 생성해야 할 1출력버퍼분의 악음데이터 생성을 효율적으로 할 수 있어서, 발음에 지장이 생기는 사태를 방지할 수 있음과 동시에, 다른 처리를 저해할 우려가 적어진다.
스텝S51에 이어지는 스텝S52에서는 「초기설정」에서 재생예약한 출력버퍼 이외의 나머지 출력버퍼중 하나의 출력버퍼상에 시각(ST)을 선두로 한 생성량(SR)분의 악음생성영역을 설정한다.
계속되는 스텝S53에서는 생성량(SR)의 악음데이터를 생성하는 발음채널수를 결정한다. 여기서, 이 발음채널수는 일예로 지연량(OR)의 함수로 결정하도록 해도 된다. 도21은 그와 같은 함수 특성의 일예를 나타낸 도면이다. 이 예에서는 지연량(OR)이 일정 미만인 경우에는 노트 온 이벤트처리(도10)에서 발음 할당을 한 발음 채널수(CHmax)가 그대로 악음데이터를 생성하는 발음채널수가 되지만, 지연량(OR)이 일정 이상이 되면 지연량(OR)이 증가함에 따라서 악음데이터를 생성하는 발음채널수는 CHmax보다 감소되어 나간다. 이와 같이 지연량(OR)이 일정 이상인 경우에는 발음 채널수가 감소됨으로써 악음생성처리에 요하는 시간이 단축되게 된다.
스텝S53에 이어지는 스텝S54에서는 연산순서(노트 온 이벤트처리의 스텝S35에서 결정한 것)가 1위인 발음채널의 채널번호를 레지스터(i)에 격납하고, 스타트 포인터(sp)에서 시각(ST)을 가리킨다. 계속해서, 레지스터(i)내의 채널번호의 발음채널용 외부 음원 레지스터의 예약영역을 참조하여 스타트 포인터(sp) 이후의 생성량(SR)분의 악음생성영역에서 최초의 예약(피치벤드의 예약, 노트 오프의 예약, 덤프 예약 등)을 검출한다(스텝S55). 계속해서, 예약이 검출되었는지의 여부를 판단한다(스텝S56).
YES이면 당해 발음채널에 대해 당해 예약 시각까지의 악음생성처리를 실행하고, 스타트 포인터(sp)를 당해 예약 시각까지 진행시킨다(스텝S57). 이 악음생성처리에서는 상술한 바와 같이 음원레지스터에 격납된 제어파라미터에 따른 피치로 RAM(5)으로부터 파형데이터를 판독하고, 그 파형데이터에 음색제어(필터연산)와, 음량제어(음량 인벨로프 데이터의 승산)와, 피치, 음색 또는 음량 등의 변조제어와, 이펙트의 부가를 제어파라미터에 따라 실시함으로써 악음데이터를 생성한다. 그리고, 생성한 악음데이터를 그때까지의 출력버퍼내의 데이터에 누산한다.
스텝S57에 이어지는 스텝S58에서는 당해예약의 내용을 당해 음원레지스터에 격납함으로써 그 예약내용을 실행한다. 여기서, 노트 오프의 예약이 검출되었을 경우에는 당해 발음채널의 외부 음원레지스터에 노트오프를 기록하고, 음량 인벨로프의 릴리스 슬러트를 개시한다. 또, 덤프의 예약이 검출되었을 경우에는 덤프 실행 완료후(즉, 음량 인벨로프의 레벨이 일정 이하의 낮은 값이 된 후), 〔대책2〕로 나타낸 바와 같이 당해 발음 채널에서 이용해야 할 음원 레지스터로서, 외부 음원레지스터 대신 내부 음원 레지스터를 선택한다(단, 먼저 외부 음원레지스터에서 내부 음원레지스터로의 전환을 한 후에 외부 음원레지스터에 대해 덤프를 실행해도 좋다). 또, 도10의 스텝S34에서 설명한 바와 같이, 내부 음원레지스터에 제어 파라미터, 노트 온 및 레지스터(TM)내의 노트 온 발생시각의 데이터를 격납하는 경우에는 외부 음원레지스터의 예약영역에 레지스터(TM)내의 발생시각에 따른 타이밍에서의 덤프 예약이 된다. 따라서, 악음생성처리에 있어서, 이 레지스터(TM)내의 발생시각에 따른 타이밍이 오면, 덤프가 실행된 후 외부 음원레지스터 대신 내부 음원레지스터를 이용한 악음생성처리가 개시되게 된다.
스텝S58을 종료하면 스텝S55로 돌아가서 스텝S55 이하의 처리를 반복한다.
한편, 스텝S56에서 NO라고 판단되면(혹은 처음에는 YES라고 판단되었지만 그 후 스텝S57 및 스텝S58을 경유함으로써 NO라고 판단되게 되면), 당해 발음채널에 대해 스타트 포인터(sp) 이후의 생성량(SR)분의 악음생성영역의 악음생성처리를 모두 실행한다(스텝59). 이에 따라 스텝S52에서 출력버퍼상에 설정한 생성량(SR)분의 악음생성영역에 대한 당해 발음채널의 악음데이터 기록이 완료된다.
계속해서, 스텝S53에서 결정한 수의 발음채널에 대한 악음생성처리가 모두 실행되었는지의 여부를 판단한다(스텝S60). NO이면 연산순서가 다음 순위인 발음채널의 채널번호를 레지스터(i)에 격납하고, 스타트 포인터(sp)를 시각(ST)에 설정한다(스텝S61). 그리고, 스텝S55로 돌아가서 스텝S55 이하의 처리를 반복한다. 이에 따라 발음채널마다 생성된 악음데이터가 차례로 출력버퍼상의 생성량(SR)분의 악음생성영역에 누산되어 나간다. 한편, 스텝S60에서 YES라고 판단되면(혹은 처음에는 NO라고 판단되었지만, 그 후 스텝S55 이하를 반복함으로써 YES라고 판단되게 되면), 악음생성처리를 종료한다. 이에 따라 스텝S62에 나타낸 바와 같이 각 발음채널에 대한 악음데이터를 누산한 악음데이터(혹은 그 악음데이터에 적당한 이펙트를 부가한 것)가 출력버퍼상의 생성량(SR)분의 악음생성영역에 기록되게 된다. 또, 이렇게 해서 생성 가능한 발음채널수가 발음의 할당처리를 행한 발음채널수 미만인 경우에는 연산순서가 늦은 발음채널에 대한 악음생성처리가 생략되는 식으로, 동시발음채널수는 감소하게 된다.
스텝S62에 이어지는 스텝S63에서는 시각(ST)에 생성량(SR)의 길이를 더한 시각을 새로운 시각(ST)으로 설정한다. 이 새로운 시각(ST)은 다음에 「음원처리1」을 실행할 때의 연산 스타트 위치가 된다. 계속되는 스텝S264에서는 금회 노트 오프가 있던 채널에 대한 음량 인벨로프의 크기를 서서히 제로쪽으로 떨어뜨린다. 계속해서, 1출력버퍼분의 악음데이터가 완성되었는지의 여부를 판단한다(스텝S65). NO이면 리턴한다. 한편 YES가 되면 그 출력버퍼를 후술하는 「음원처리2」에 의해 당해 출력버퍼에 연결되어 있는 다른 출력버퍼로부터 분리해서 「출력디바이스」에 재생예약한다(스텝S66). 그리고 리턴한다. 도1, 도2의 대응을 나타내면 이 스텝S66의 처리는 소프트음원(SSM)에서 생성한 악음데이터를 OS의 제2 인터페이스(IF2)("WAVE out API")에 대해 출력하는 것에 상당한다.
또, 스텝S50 및 스텝S51의 또다른 예로서 「GT-ST」의 결과를 그대로 SR로서 설정하는 것도 가능하다. 그런 경우에는 상기 〔대책1〕에 있어서의 도5의 예와 같이 어느 한 기회에 내부 인터럽트신호가 발생하지 않았기 때문에 「음원부」가 기동하지 않았을 경우, 그 기회에서의 미생성 악음데이터를 그 직후에 내부 인터럽트신호가 발생한 기회에 모두 생성하게 된다. 이에 따라서도 1프레임내에 몇번 내부 인터럽트신호가 발생하지 않아도 내부 인터럽트신호가 발생한 기회만큼 당해 프레임내에 1출력버퍼분의 악음데이터 생성이 완료되므로, 발음에 지장이 생기는 사태가 방지된다. 또, 내부 인터럽트신호가 발생하지 않은 기회에서의 미생성 악음데이터를 도6의 예와 같이 그 후에 내부 인터럽트신호가 발생한 다수의 기회에 분산하여 생성하도록 하거나, 혹은 당해 프레임내의 마지막 기회까지 서서히 생성하도록 해도 되는 것은 상기 〔대책1〕에서 설명한 대로이다.
또, 스텝S53에 있어서의 발음채널수 결정법의 또다른 예로서 다음과 같이 해도 된다. 먼저, 하나의 발음채널에서 생성량(SR)분의 악음데이터를 생성하는데 요하는 연산시간과, 금회의 연산가능시간(EJ)(다음에 내부 인터럽트신호가 발생할 예정 시각인 연산종료시각(SJ)으로부터 금회 내부 인터럽트신호가 실제로 발생한 시각인 연산개시시각(KJ)을 뺀 시간)에 의거해서 시간(EJ)내에 몇 개의 발음채널에서 생성량(SR)분의 악음데이터 생성이 가능한지를 산출한다. 그리고, 산출한 생성 가능한 발음채널수가 노트 온 이벤트 처리(도10)에서 발음할당을 한 발음채널수 이상이면 당해 발음할당을 한 발음채널수를 그대로 악음데이터를 생성하는 발음채널수로 결정한다. 한편, 산출한 생성가능한 발음채널수가 발음할당을 한 발음채널수 미만이면 당해 생성가능한 발음채널수를 악음데이터를 생성하는 발음채널수로서 결정한다(즉, 〔대책1〕에서 설명한 바와 같이, 악음데이터를 생성하는 발음채널수를 감소시킴으로써 1프레임내에 1출력버퍼분의 악음데이터 생성을 확보한다.
도8의 설명으로 돌아가서 스텝S5에서 기동요인 ③이 발생하고 있는 것이 판정되면 「음원처리2」를 실행하고(스텝S10), 소정의 상태표시를 패널상에 행한다(스텝S11). 그리고, 스텝S3으로 돌아가서 스텝S3 이하의 처리를 반복한다.
「음원처리2」도 「음원부」의 일부를 이루는 것이다. 이 「음원처리2」는 「출력디바이스」(즉, DMA컨트롤러(11)에 의한 외부인터럽트처리)의 실행에 따라 발생하는 요구에 의거해서 실행된다. 도1, 도2와의 대응을 나타내면, 이 「음원처리2」는 소프트음원(SSM)으로부터 제2 인터페이스(IF2)("WAVE out API")에 대한 악음데이터의 수수에 관련된 처리에 대응하고 있다.
도13은 DMA 컨트롤러(11)에 의한 외부 인터럽트 처리의 일예를 나타낸 플로우차트이다. 이 외부 인터럽트 처리는 DAC(12)에 악음데이터를 1샘플분씩 보내는 타이밍(DAC(12)의 재생샘플링주기)에서, DMA 컨트롤러(11)가 실행되는 것이며, 이 처리에 의해 출력버퍼에 기억된 1프레임분의 악음데이터가 재생 샘플링 주기마다 1샘플분씩 판독되어 DAC(12)에 공급된다. 이것은 도1, 도2에 있어서의 「출력디바이스」 처리에 상당한다. 즉, OS의 드라이버인 「출력디바이스」에 의해 제2 인터페이스(IF2)("WAVE out API")에 대해 소프트웨어 음원(SSM)로부터 인가된 악음데이터를 받아들이고, 이것을 외부의 하드웨어 즉 DAC(12)에 출력하는 처리에 대응하고 있다.
처음에 「초기처리」(도9) 또는 「음원처리1」(도12)에 의해 「출력디바이스」에 재생예약된 출력버퍼중 현재 판독중인 출력버퍼(포인터(PB)로 가리킨 출력버퍼)를 DAC(12)에 보낸다(스텝S71). 계속해서, 포인터(pp)를 1샘플분 진행하고(스텝S72), 당해 출력 버퍼내의 모든 악음데이터를 DAC(12)에 다 보내었는지(즉 당해 출력버퍼에 대한 재생처리를 완료했는지)의 여부를 판단한다(스텝S73). NO이면 리턴한다.
한편, 스텝S73에서 YES라고 판단되면 다음 출력버퍼의 재생예약이 있는지의 여부를 판단한다(스텝S74). 이것은 제2 인터페이스(IF2)("WAVE out API")에 대해 OS를 통해 「출력디바이스」로부터 액세스하는 처리, 즉 OS를 개재시킨 처리에 상당한다.
다른 어떤 처리의 영향으로 인해 「음원부」의 기동이 지연되고 있기 때문에 「음원부」에서 생성을 완료한 악음데이터를 기록한 출력버퍼가 아직 재생 예약되어 있지 않은 경우에도 이미 재생예약되어 있는 출력버퍼(「초기설정」(도9)에서 선행하여 재생예약한 출력버퍼나, 음원처리1에서 이미 재생 예약하고 있는 출력버퍼)가 있으면 그 재생처리가 모두 완료되기까지는 스텝S74에서 YES라고 판단되어 스텝S75로 진행하고, 그 출력버퍼에 포인터(PB)를 진행시킨다. 이에 따라 〔대책3〕로서 설명한 바와 같이, 악음생성처리의 지연으로 인한 음의 단절을 방지하기 위한 악음생성처리의 기동시간 허용범위가 확대되게 된다. 스텝S75에 이어지는 스텝S76에서는 재생처리를 완료한 출력버퍼를 「음원처리2」의 루틴에 반환하는 요구를 발생한다. 그리고 리턴한다.
한편, 「음원부」의 기동이 대폭적으로 지연되고 있기 때문에 이미 재생예약되어 있는 출력버퍼의 재생처리를 모두 완료한 구간내에서도 「음원부」에서 생성을 완료한 악음데이터를 기록한 출력버퍼가 아직 재생예약되어 있지 않은 경우에는 스텝S74에서 NO라고 판단되어 스텝S77로 진행한다. 스텝S77에서는 노이즈음의 발생을 방지하기 위해 DAC(12)의 출력을 뮤트한다. 계속해서 스텝S78에서는 「음원처리2」에 대해 리셋요구(악음생성처리의 리셋을 요구한 것)를 발생한다. 그리고 리턴한다.
도14는 「출력디바이스」로부터의 반환요구(도13의 스텝S76)에 의거한 「음원처리2」의 일예를 나타낸 플로우차트이다. 먼저 「출력디바이스」로부터의 반환된 출력버퍼를 받아들인다(스텝S81). 계속해서, 그 출력버퍼를 클리어하고, 「음원부」가 이미 보유하고 있는 출력버퍼뒤에 그 출력버퍼를 연결한다(스텝S82). 또, 이 연결이란 출력버퍼끼리를 가상으로 순서대로 연결하여 커다란 하나의 버퍼로서 취급하는 것이다. 따라서, RAM(5)내에서 물리적으로 상호 인접한 영역에 그러한 출력버퍼를 존재시키는 일은 필요하지 않다. 스텝S82에 이어지는 스텝S83에서는 「음원부」와 「출력디바이스」 사이에서의 시각 편의의 유무를 확인하여 「음원부」의 동작을 보정하기 위해 「출력디바이스」로부터의 반환요구 타이밍을 나타내는 데이터를 작성한다. 그리고 리턴한다.
도15는 「출력디바이스」로부터의 리셋요구(도13의 스텝S78)에 의거한 「음원처리2」의 일예를 나타낸 플로우챠트이다. 처음에 각 발음채널용 음원레지스터내의 데이터와, RAM(5)의 출력버퍼내의 데이터를 모두 클리어하다(스텝S91). 계속해서, 「초기설정」(도9)의 스텝S23 내지 S25와 같이 「출력디바이스」를 초기 설정하고(스텝S92), 데이터를 클리어된 4개의 출력 버퍼의 재생을 다시 「출력디바이스」에 예약하고(스텝S93), 「출력디바이스」를 기동함과 동시에, 소프트 타이머를 스타트시킨다(스텝S94). 그리고 리턴한다.
이와 같이 리셋요구에 의거한 「음원처리2」에서는 「출력디바이스」에 출력버퍼가 재생예약되어 있지 않을 경우에는 〔대책4〕로 설명한 바와 같이, 그때까지 「음원부」에서 실행하고 있던 악음생성처리를 중단하고, 클리어된 출력버퍼 재생의 선행예약을 「출력디바이스」에 다시 한 후, 그 이후에 공급되는 MIDI 메시지에 의거해서 「음원부」를 기동함으로써 악음생성처리를 새로 개시하고 있다. 이에 따라 재생예약이 맞지 않아 일시적으로 악음이 흩어졌을 경우에도 바로 안정된 악음생성동작으로 복귀하므로, 노이즈를 최소한으로 억제할 수 있다.
도8의 스텝S5로 돌아가서, 기동요인 ④가 발생하고 있다고 판정되면, 그 요구에 따른 처리(예를들면, 디스플레이(9)상의 패널 입력 이벤트처리나 키보드(8)로부터의 코맨드 입력 이벤트처리 등)를 실행하고(스텝S12), 그에 따른 표시를 패널상에 행한다(스텝S13). 그리고, 스텝S3로 돌아가서 스텝S3 이하의 처리를 반복한다.
한편, 기동요인 ⑤가 발생하고 있다고 판정되면 메인 루틴을 종료시킥 위한 소정의 처리를 실행하고(스텝S14), 디스플레이(9)로부터 패널을 소거한다(스텝S15). 그리고 리턴한다.
또, 스텝S5에 있어서 기동요인 ① 내지 ⑤중 2 이상의 기동요인이 동시에 발생하고 있다고 판단되었을 경우에는 기동요인 ①이 최우선, 기동요인 ②와 ③은 그 다음의 우선순위, 기동요인 ④는 또 그 다음의 우선순위, 기동요인 ⑤는 최하위의 우선순위로서, 상기 우선순위에 따라 처리된다. 기동요인②와 ③ 사이에는 특단의 우선순위를 붙이지 않고 대책으로 한다. 또, 스텝S3 내지 스텝S5는 의사멀티 태스크 처리에 있어서의 태스크 관리를 가상적으로 나타낸 것이며, 실제로는 어느 하나의 기동요인 발생에 의거해서 처리를 실행하는 도중에 그것보다 우선순위가 높은 기동요인이 발생함에 따라 인터럽트에서 다른 처리를 실행하는 것(예를들면, 기동요인②의 발생의 의거해서 「음원처리1」을 실행하는 도중에 기동요인 ①이 발생함에 따라 인터럽트에서 「MIDI 처리」를 실행하는 것 등)이 있다.
그러나, 예를들면 기동요인 ②의 발생에 의거해서 「음원처리1」을 실행하는 도중에 그것보다 우선순위가 낮은 기동요인 ④ 또는 ⑤가 발생되었을 경우, 이들의 기동요인 ④ 또는 ⑤에 대한 기동은 기동요인②의 발생에 의거한 1회의 「음원처리1」이 종료될 때까지 기다리지 않으면 않된다. 그러나, 도19 또는 도20에 나타낸 바와 같은 적절한 함수에 따라 1회의 기동에 대응하는 생성량(SR)을 지연량(OR)의 함수로 적절히 결정하도록 함에 따라, 지연량(OR)이 많은 경우에도 기동요인 ②의 발생에 의거한 1회의 「음원처리1」이 과도하게 처리시간을 점유하는 일이 없어지므로, 우선순위가 낮은 기동요인에 대응하는 처리를 저해하는 확률이 낮아져서 유효하다.
다음에 도2의 시스템구성에 대응하는 실시형태에 대해 설명한다.
도2의 시스템구성을 채용하는 경우에도 소프트웨어 음원 모듈(SSM)에 있어서의 프로그램은 도8~도15와 같은 내용으로 되어 있어도 된다. 또, 도16, 도19~도21에 따른 설명도 똑같이 적용 가능하다. 물론, 도17과 도18은 적용되지 않는다. 단, 도2의 시스템구성을 채용하는 경우에는 도8의 스텝S3에 있어서 기동요인의 체크방식이 상술한 예와는 다르다. 즉, 도2의 시스템구성을 채용하는 경우에는 도8의 스텝S3에 있어서 하기의 각 기동요인의 발생을 체크한다.
기동요인①:「MIDI API」를 통해 MIDI 메시지가 공급된 것(즉, 어플리케이션 소프트(APS1)(도2참조)로부터 MIDI 메시지가 공급된 것).
기동요인②:소프트 타이머에 의해 「음원부」를 기동하는 내부 인터럽트신호가 발생한 것.
기동요인③:「출력디바이스」로부터의 처리요구가 검출된 것.
기동요인④:그밖의 요구(패널의 입력이벤트나 키보드(8)의 코맨드입력 이벤트(메인 루틴 종료 코맨드는 제외)가 검출된 것.
기동요인⑤:키보드(8)의 메인 루틴 종료 코맨드의 입력이벤트가 검출된 것.
상기 기동요인중 기동요인 ①이 도1의 시스템구성을 채용할 경우 상술한 기동요인 ①과 상위하며, 다른 기동요인 ②~⑤는 같다.
상술한 바와 같이 도2의 시스템구성을 채용하는 경우에는 소프트웨어 음원 모듈(SSM)은 OS에 인스톨된다. 그리고, 도8의 스텝S3에서 체크하는 기동요인 ①로서 「OS의 제1 인터페이스(IF1)(즉, "MIDI API")를 통해 MIDI 메시지가 공급된 것」을 체크하도록 프로그램된다. 이에 따라 어플리케이션 소프트인 소프트웨어 음원 모듈(SSM)이 OS상에서 드라이버로서 행동하고, 다른 어플리케이션 소프트(APS1)로부터 제1인터페이스(IF1)(즉, "MIDI API")를 통해 인가되는 MIDI 메시지를 받아들인다. 소프트웨어 음원 모듈(SSM)에서는 상술한 바와 같이 내부 인터럽트신호(기동명령)의 발생에 의거해서 악음생성처리가 기동됨에 따라서, 이 받아들인 MIDI 메시지에 의거한 악음데이터를 생성처리한다. 그리고, 생성된 악음데이터는 상술한 바와 같이 프레임단위로 OS의 상기 제2 인터페이스(IF2)("WAVE out API")(즉 "WAVE out API")를 통해 출력된다.
다음에, 도25의 시스템구성에 대응하는 실시형태에 대해 설명한다.
도26은 도25의 시스템구성을 채용할 경우에 CPU(3)에 의해 실행되는 사운드 모듈(SGM-MM) 프로그램의 메인 루틴을 나타낸 플로우차트이다. 이 메인루틴에서는 도8의 스텝S1 및 S2와 같은 처리내용의 스텝 S301 및 S302를 실행한 후, 계속되는 스텝S303에서 하기의 각 기동요인의 발생을 체크한다.
기동요인①:어플리케이션 소프트(APS1)(도25)로부터 발생한 MIDI 메시지를 인터페이스(IF1)("MIDI API")(도25)를 통해 수신한 것.
기동요인②:소프트 타이머에 의해 「음원부」를 기동하는 내부 인터럽트신호가 발생된 것.
기동요인③:「출력디바이스」로부터의 처리요구가 검출된 것.
기동요인④:어플리케이션 소프트(APS1)로부터 발생한 파형데이터를 인터페이스(IF3)(도25)를 통해 수신한 것.
기동요인⑤:그밖의 요구(패널의 입력이벤트나 키보드(8)의 코맨드 입력 이벤트(메인 루틴 종료 코맨드는 제외)가 검출된 것.
기동요인⑥:키보드(8)의 메인 루틴 종료 코맨드의 입력 이벤트가 검출된 것.
상기 기동요인중 기동요인 ④는 도25의 시스템구성을 채용할 경우에 새로 추가된 기동요인이고, 다른 기동요인 ①, ②, ③, ⑤, ⑥은 도2의 시스템 구성을 채용할 경우에 도8의 스텝S3에서 체크하는 기동요인 ①, ②, ③, ④, ⑤와 각각 동일하다.
여기서, 기동요인 ④를 일으키는 어플리케이션 소프트(APS1)의 프로그램 일예를 도27에 나타낸다. 이 프로그램은 재생중인 멀티 미디어 데이터의 이벤트 타이밍에서 기동하며, 최초의 스텝S401에서그 이벤트가 파형데이터의 발생이벤트인지, MIDI 메시지의 발생 이벤트인지, 그밖의 종류의 정보 발생 이벤트인지를 판단한다.
파형데이터의 발생이벤트이면 스텝S401로 진행하고, 발생한 파형데이터를 인터페이스(IF3)(도25)에 출력한다. 이에 따라 기동요인 ④가 발생하게 된다.
한편, MIDI 메시지의 발생 이벤트이면 스텝S402로 진행하고, 발생한 파형데이터를 인터페이스(IF1)("MIDI API")(도25)에 출력한다.
한편, 그밖의 종류의 정보(예를들면 화상데이터 등)의 발생 이벤트이면 스텝S403으로 진행하고, 당해 종류에 대응하여 OS가 가진 API에 그 정보를 출력한다.
도26으로 돌아가서 스텝S304 이하에서는 기동요인 ④의 발생에 의거한 스텝S312의 「WAVE 처리」 및 그것에 의거한 S313의 상태표시가 추가되어 있고 있다는 점이 도8과 다르며, 또 스텝S310의 「음원2처리」의 일부 내용과 도8의 스텝S10과 다르지만, 그외에는 도8의 스텝S4 이하와 같다.
또, 스텝S305에 있어서 기동요인① 내지 ⑥중 2 이상의 기동요인이 동시적으로 발생하고 있다고 판단되었을 경우에는 기동요인 ①이 최우선이고, 기동요인② 내지 ⑥ 사이에서는 기동요인 ④, ②, ③, ⑤, ⑥의 순으로 우선순위가 높아지고 있다.
도28은 기동요인④의 발생에 의거한 「WAVE 처리」의 일예를 나타낸 도면이다. 이 처리에서는 최초의 스텝S501에서 어플리케이션 소프트(APS1)로부터 인터페이스(IF1)("MIDI API")(도25)를 통해 노트 온을 수신하고 나서 당해 노트 온에 의거해서 「음원1처리」에서 생성된 악음데이터가 재생되기 까지의 시간△t(이 시간△t내에서 「음원1처리」에서의 악음생성 지연이 허용되고 있으며, 도7의 예에서는 이 지연허용시간은 약 4프레임분의 시간이다)을 현재의 시각에 가산하여 RAM(5)내의 소정의 레지스터(WT)에 기록한다.
계속되는 스텝S502에서는 어플리케이션 소프트(APS1)로부터 인터페이스(IF3)(도25)를 통해 인가된 파형데이터를 레지스터(WT)내의 시각데이터와 함께 RAM(5)내의 소정의 웨이브 버퍼(WB)에 기록한다.
계속되는 스텝S503에서는 RAM(5)내의 소정의 플래그(WPF)(출력 버퍼에 대한 파형데이터의 기록중에는 1로 하고, 기록중이 아닐 때에는 0으로 하는 플래그)의 값이 1인지 아닌지를 판단한다.
YES이면 그대로 리턴한다. 한편 NO이면 스텝S504로 진행하여 현재 보유하고 있는 출력버퍼가 재생되게 되는 시각범위안에 레지스터(WT)내의 시각이 포함되어 있는지의 여부를 판단한다.
YES이면 스텝S505로 진행하여 현재 보유하고 있는 출력버퍼의 레지스터(WT)내의 시각 이후의 재생시각에 대응하는 영역에 웨이브 버퍼(WB)내의 파형데이터를 기록한다. 또, 한번의 파형데이터 수신 이벤트에 의거해서 「WAVE처리」에 의해 웨이브 버퍼(WB)에 기록되는 파형데이터양은 1출력버퍼분의 데이터양보다 매우 많으므로(일예로서 재생시간으로 해서 약 5초분의 양이다), 이 스텝S505에서는 웨이브 버퍼(WB)내의 파형데이터중 선두 부분 일부의 파형데이터가 출력버퍼에 기록된다. 그리고, 스텝S506으로 진행하여 플래그(WPF)의 값을 1로 바꾼 후 리턴한다. 한편, 스텝S504에서 NO라고 판단되면 그대로 리턴한다.
도29는 「출력디바이스」로부터의 반환요구(도13의 스텝S76)에 의거한 「음원처리2」의 일예를 나타낸 플로우차트이다. 이 처리에서는 도14의 스텝S81 내지 S83과 같은 처리내용의 스텝S601 내지 S603을 실행한 후, 계속되는 스텝S604에서 플래그(WPF)의 값이 1인지의 여부를 판단한다.
NO이면(즉, 출력버퍼에의 파형데이터에 대한 기록중이 아니면), 스텝S605로 진행하고, 스텝S601에서 받아들인 출력버퍼가 다음에 재생되게 되는 시각범위를 체크한다. 계속되는 스텝S606에서는 당해 재생시각의 범위내에 「WAVE 처리」에서 레지스터(WT)에 기록한 시각이 포함되어 있는지의 여부를 판단한다. NO이면 스텝S607로 진행하여 당해 출력버퍼에 기록되어 있는 파형데이터를 모두 클리어한 후 리턴한다. 한편 YES이면 스텝S608로 진행하고, 당해 출력버퍼에 기록되어 있는 파형데이터중 레지스터(WT)내의 시각에 대응하는 영역까지의 파형데이터를 클리어한다. 계속되는 스텝S609에서는 당해 출력버퍼의 레지스터(WT)내의 시각 이후의 재생시각에 대응하는 영역에 웨이브 버퍼(WB)내의 파형데이터중 선두 부분 일부의 파형데이터를 기록한다. 그리고, 스텝S610으로 진행하여 플래그(WPF)의 값을 1로 바꾼 후 리턴한다.
이에 반해, 스텝S604에서 YES라고 판단되었을 경우(즉, 출력버퍼에의 파형데이터가 기록중인 경우)에는 스텝S611로 진행하고, 스텝S601에서 받아들인 출력버퍼의 재생시각에 대응하는 웨이브 버퍼(WB)내의 파형데이터(그때까지 출력버퍼에 기록한 파형데이터에 이어지는 일부의 파형데이터)를 당해 출력버퍼에 기록한다. 계속되는 스텝S612에서는 당해 출력버퍼의 기억영역 도중에 기록이 종료했는지의 여부를 판단한다. NO이면 그대로 리턴한다. 한편 YES이면 스텝S613으로 진행하고, 그 다음의 파형데이터 수신 이벤트에 의거한 파형데이터가 웨이브 버퍼(WB)에 기록되어 있는지를 판단한다.
NO이면 스텝S614로 진행하고, 당해 출력버퍼에 기록되어 있는 파형데이터중 스텝S611에서 기록을 종료한 영역 이하의 영역의 파형데이터를 클리어한다. 그리고, 스텝S615로 진행하여 플래그(WPF)의 값을 0으로 바꾼 후 리턴한다.
한편 스텝S613에서 YES라고 판단되었을 경우에는 스텝S616으로 진행하며, 상기 다음의 파형데이터 수신 이벤트에 의거해서 파형데이터와 함께 웨이브 버퍼(WB)에 기록된 레지스터(WT)내의 시각이 당해 출력버퍼의 재생시각보다 아직 앞의 시간인지, 그 재생시각의 범위내에 포함되어 있는지, 혹은 그 재생시각보다 전의 시각(즉, 이미 경과되어 버린 시각)인지를 판단한다.
아직 앞의 시각이면 상술한 스텝S614로 진행하여 스텝S614 및 스텝S615의 처리를 실행한다.
한편, 당해 출력 버퍼 재생시각의 범위내이면 스텝S617로 진행하고, 당해 출력버퍼에 기록되어 있는 파형데이터중 레지스터(WT)내의 시각에 대응하는 영역까지의 파형데이터를 클리어한다. 계속되는 스텝S618에서는 당해 출력버퍼의 레지스터(WT)내 시각 이후의 재생시각에 대응하는 영역에 상기 다음의 파형데이터 수신 이벤트에 의거해서 웨이브 버퍼(WB)에 기록된 파형데이터중 선두 부분 일부의 파형데이터를 기록한다. 그리고 리턴한다.
한편, 이미 경과되어 버린 시각이면 스텝S619로 진행하고, 스텝S611에서 기록을 종료한 영역에 이어지는 영역에 상기 다음의 파형데이터 수신 이벤트에 의거해서 웨이브 버퍼(WB)에 기록된 파형데이터중 선두 부분 일부의 파형데이터를 기록한다. 그리고 리턴한다.
이러한 「음원처리2」를 실행함으로써 「음원1처리」에서 생성된 파형데이터가 출력버퍼에 기록되기 전에 어플리케이션 소프트(APS1)로부터 공급된 파형데이터가 「음원1처리」에 있어서 파형생성처리의 허용지연시간을 고려한 출력버퍼중의 영역에 초기치로서 기록된다. 그리고, 그 후 도12에 도시한 바와 같은 「음원1처리」에서 각 채널마다 생성된 파형데이터가 이 초기치에 차례로 누산되어 나간다. 이에 따라 「음원1처리」에 있어서의 파형데이터의 생성타이밍에 좌우되지 않고, 파형데이터가 동기를 취해 혼합되게 된다.
도30은 「출력디바이스」로부터의 리셋요구(도13의 스텝S78)에 의거한 「음원2처리」의 일예를 나타낸 플로우차트이다. 이 처리에서는 최초의 스텝S701에 있어서 음원레지스터 및 출력버퍼내의 데이터를 모두 클리어함과 동시에, 웨이브 버퍼(WB)내의 데이터도 모두 클리어한다. 즉, 그때까지의 파형데이터 수신 이벤트에 의거해서 「WAVE 처리」에서 웨이브 버퍼(WB)에 기록한 파형데이터 및 시각데이터를 모두 캔슬하고, 새로 수신하는 파형데이터로부터 재생을 개시하도록 한다. 그리고, 이어지는 스텝S702 내지 스텝S704에서는 도15의 스텝S92 내지 스텝S94와 같은 처리내용을 실행한 후 리턴한다.
또, 어플리케이션 소프트(APS1)로부터 공급된 파형데이터를 출력버퍼중의 영역에 초기치로 기록하는 처리는 반드시 도29의 예와 같이 「출력디바이스」로부터의 반환요구에 의거한 「음원처리2」의 일부로서 실행하지 않으면 않되는 것이 아니라, 「음원1처리」에서 파형데이터가 생성될 때까지 실행하면 충분한 것이다. 따라서, 또다른 예로서 도12의 「음원1처리」의 스텝S52에서 SR분의 악음생성영역을 설정할 때 이 초기치의 기록처리를 함께 하도록 해도 된다.
또, 어플리케이션 소프트(APS1)로부터 발생하는 파형데이터는 샘플링 주파수가 각기 다르며, 따라서, 「음원1처리」에서 생성한 파형데이터와는 샘플링 주파수가 일치하지 않는 경우가 있다. 그래서, 웨이브 버퍼(WB)내의 파형데이터를 출력버퍼에 기록하는 처리의 전단계로서 소정의 보간처리 또는 오버샘플링처리를 상기 파형데이터에 가함으로써 샘플링주파수를 일치시켜 두도록 해도 된다.
또, 어플리케이션 소프트(APS1)로부터 발생하는 화상데이터 등 그밖의 정보에 대해서도 「음원1처리」시 파형생성처리의 허용지연시간을 고려한 재생타이밍 조정처리를 똑같이 수행하도록 해도 된다.
이와 같이, 도25의 시스템구성에서는 어플리케이션 소프트(APS1)로부터 발생하여 인터페이스(IF3)에 출력된 파형데이터는 어플리케이션 소프트(APS1)로부터 인터페이스(IF1)("MIDI API")를 통해 수신한 노트 온에 의거해서 소프트웨어 음원 모듈(SSM)에서 생성된 파형데이터와 동기를 취하여 혼합한 후, 인터페이스(IF2)를 통해 OS에 인가되게 된다. 이에 따라 소프트웨어 음원 모듈(SSM)에 있어서의 파형데이터 생성의 시간 지연이 조정되어 파형데이터의 재생타이밍이 일치하게 된다.
또, 이상의 실시형태에서는 〔대책1〕에서 통산적으로 1프레임내에 소정 샘플수의 악음데이터를 생성하도록 하고 있다. 그러나, 여기서 「통산적으로」라는 것은 반드시 하나의 프레임내에 상기 소정 샘플수의 악음데이터 생성이 완료되는 것을 요구하는 것은 아니다. 특히, 이러한 실시형태에서는 도7에 도시한 바와 같이 악음데이터를 기록한 출력버퍼를 다수 재생예약할 수 있게 되어 있으므로, 하나의 프레임내에서 악음데이터의 생성연산이 완료되지 않아도, 그후의 프레임에서 그 만큼을 보충하는 연산을 하는 것이 가능하다 도6을 예로 들어 이 것을 설명하면, 도6에서는 내부 인터럽트신호가 발생하지 않은 기회에서의 미생성 악음데이터를 하나의 프레임내의 마지막 기회까지 대도록 생성하고 있으나, 상기 마지막 기회까지 생성헐 수 없어도 그 다음 프레임에 그 생성을 미루도록 해도 된다(예를들면, 미생성 4회분의 악음데이터를 도6과 같이 10회째의 기회(100msec째)에 모두 생성하는 대신에, 10회째의 기회에 7, 8회째의 2회분 악음데이터만을 생성하고, 이 이후의 프레임에서 내부 인터럽트신호가 발생하는 기회에 나머지 9, 10회째의 2회분 악음데이터를 생성하도록 해도 된다). 또, 도16에 예시한 바와 같이, 어떤 프레임에서 미생성 악음데이터의 생성을 그 다음 프레임에 미루는 경우가 있을 수 있다.
또, 이상의 실시형태에서는 노트 온 이벤트처리나 노트 오프 이벤트처리라는 MIDI 처리에 있어서, 「음원부」 제어용 제어파라미터, 노트 온 및 이벤트의 발생시각을 나타낸 데이터를 각 발음채널마다 형성한 음원 레지스터에 격납하고 있다. 그러나, 이렇게 이들 제어 파라미터 등을 각 발음채널마다 별도의 음원레지스터에 격납하는 대신, 하나의 기억영역에 제어파라미터 등을 발음채널의 채널번호를 나타낸 데이터와 페어로 차례로 기록해도 된다. 그런 경우에는 MIDI 메시지의 공급에 의거해서 일단 시퀀스 데이터를 작성하고, 이 시퀀스 데이터에 의거해서 악음데이터의 생성을 하게 된다.
또, 이상의 실시형태에서는 「음원처리2」에 있어서 「출력디바이스」로부터 반환된 출력버퍼를 「음원부」가 이미 보유하고 있는 출력버퍼뒤에 연결하고 있으며, 따라서 「음원처리1」에서는 이와 같이 연결된 출력버퍼에 1출력 버퍼분씩 악음데이터를 생성하고 있다. 그러나, 이와 같이 출력버퍼를 연결하는 대신, 개별 출력버퍼를 단위로 해서 악음데이터를 생성하도록 해도 된다.
또, 이상의 실시형태에서는 「음원부」의 기동에 선행하여 4개의 출력버퍼 재생을 「출력디바이스」에 예약하고 있다. 그러나, 「음원부」의 기동에 선행하여 「출력디바이스」에 재생예약하는 출력버퍼의 수는 물론 4 이외여도 된다. 또, RAM(5)내에 형성하는 출력버퍼의 수도 「음원부」의 기동에 선행하여 「출력디바이스」에 재생예약하는 출력버퍼의 수보다 1 이상 많은 적당한 수여도 된다.
또, 이상의 실시형태에서는 〔대책1〕, 〔대책2〕, 〔대책3〕 및 〔대책4〕를 모두 실시하고 있다. 그러나, 이러한 대책은 각각 상호 독립적으로 실시해도 「음원부」기동의 지연을 원인으로 발음에 지장이 생기는 사태를 방지할 수 있는 것이다. 따라서, 이러한 대책중 어느 하나만을 실시하거나 2개 또는 3개를 적당히 조합해서 실시해도 된다.
또, 상기의 실시형태에서는, 소프트음원에 있어서는, 생성한 악음파형데이터를 출력버퍼에 최대 400ms분 저장하고 나서 이것을 출력하도록 하고 있다. 그 때문에 다른 소프트웨어에 의해 처리되는 상기 재생음악정보에 관련된 다른 정보(예를들면 가라오케의 배경화상이나 가사화상정보)의 재생타이밍과 동기를 취할 수 없게 되면 문제가 생기므로, 적당한 동기화 대책을 강구하도록 하는 것이 좋다. 예를 들면 MIDI 메시지를 출력하는 타이밍을 상기 MIDI 메시지에 대응하는 재생음악정보에 동기되어야 하는 다른 정보(예를들면 가라오케의 배경화상이나 가사화상정보)의 출력타이밍보다 빠르게 하거나, 소프트음원에 있어서의 악음생성처리가 다른 처리보다 어느 만큼 선행되여 행해지도록 해 주면 최종적으로 필요한 전체 정보를 동기하여 출력할 수 있다.
또, 이상의 실시형태에서는 파형메모리방식의 악음생성처리를 CPU에 실행시키는 타입의 소프트웨어 음원에 이 발명을 적용하고 있으나, 다른 적당한 악음생성방식(예를들면 FM합성방식 등)을 CPU에 실행시키는 타입의 소프트웨어 음원에서 이 발명을 적용해도 된다.
또, 본 발명은 퍼스털 컴퓨터(즉, 범용 컴퓨터)의 CPU에 의해 악음생성처리를 실행시키도록 한 소프트웨어 음원에서 적용할 수 있을 뿐만 아니라, 전용 악음발생장치나 그밖의 특기화된 적당한 장치내에 탑재된 컴퓨터의 CPU에 의해 악음생성처리를 실행시키는 소프트웨어 음원을 구비할 시스템에서도 적용할 수 있다. 또, 파형데이터 생성의 기초가 되는 연주정보는 반드시 MIDI 폼의 정보에만 한정되는 것이 아니라, 그밖의 형식이어도 상관없다.
이상과 같이, 본 발명의 제1 관점에 의하면, 의사적 드라이버(FMD)를 형성함으로써 적당한 어플리케이션 소프트(APS1)를 통해 OS상의 제1 인터페이스(MIDI API)를 통해 인가되는 연주정보(예를들면 MIDI 메시지)를 상기 의사적 드라이버에 의해 받아들이고, 이 받아들인 연주정보를 어플리케이션 레벨의 소프트웨어 음원(SSM)에 인가할 수 있다. 따라서, 스스로가 어플리케이션 소프트이기도 한 소프트웨어 음원(SSM)이 상기 별도의 어플리케이션 소프트(APS1)로부터 인가되는 연주정보를 입력하고, 이것에 의거한 음파형 데이터 생성처리를 할 수 있게 되며, 어플리케이션 소프트인 소프트웨어 음원과 별도의 어플리케이션 소프트를 OS레벨에서 간단히 조합시킬 수 있고, 상기 별도의 어플리케이션 소프트로부터 제1 인터페이스를 통해 인가되는 연주정보(예를들면 MIDI 메시지)를 소프트웨어 음원에 입력하여 그것에 대응하는 음파형 데이터를 생성할 수 있는 것이다. 이에 따라, 어플리케이션 소프트인 소프트웨어 음원의 응용범위를 확대할 수 있음과 동시에, 게임소프트나 시퀀서 소프트 혹은 멀티미디어 소프트 등의 연주정보(MIDI 메시지)를 발생하는 각종 어플리케이션 소프트웨어를 컴퓨터의 OS에 적용하여 간편하게 사용할 수 있도록 하는 경우에, 하드웨어 음원을 필요없게 할 수 있으므로, 이러한 간편한 응용성을 확보하면서, 코스트면에서도 유리해진다는 뛰어난 효과를 가진다.
또, 제1 인터페이스(MIDI API)에 연주정보를 인가하는 제1수단(어플리케이션 소프트(APS1))과, 소프트웨어 음원(SSM)에 연주정보를 인가하는 제2수단(소프트웨어 음원에 전용으로 조립된 소프트웨어(APS2)를 구비하고, 소프트웨어 음원(SSM)이 양쪽의 연주정보에 의거한 악음파형 데이터 생성처리를 실행하도록 함으로써 종래 공지된 바와 같은 소프트웨어 음원에 전용으로 조립된 소프트웨어(APS2)와, OS를 통해 상기 소프트웨어 음원과 조합되는 별도의 소프트웨어(APS1)에 의해, 병행하여 상기 소프트웨어음원을 이용할 수 있게 된다는 뛰어난 효과를 가진다.
또, 본 발명의 제2관점에 의하면 어플리케이션 소프트인 소프트웨어 음원(SSM)의 프로그램을 OS에 드라이버로서 인스톨하고, 상기 소프트웨어 음원이 제1인터페이스(MIDI API)를 통해 인가되는 연주정보를 OS경유로 받아들이도록 함으로써, 적당한 어플리케이션 소프트(APS1)를 통해 제1 인터페이스를 통해 인가되는 연주정보(예를들면, MIDI 메시지)를 OS를 통해 소프트웨어 음원에 인가할 수 있다. 따라서, 이런 경우에도 스스로가 어플리케이션 소프트이기도 한 소프트웨어음원이 상기 별도의 어플리케이션 소프트로부터 인가되는 연주정보를 입력하고, 이것에 의거한 음파형 데이터 생성처리를 할 수 있으므로, 상기와 같은 효과를 가진다.
또한, 본 발명의 제3관점에 의하면, 컴퓨터의 메인 제어부(CPU3)에서 기동명령 발생수단을 형성하고, 파형데이터 생성처리를 기동하는 기회를 소정 시간내에 다수회 설정하고, 이 다수회의 기회중 상기 소프트웨어 음원의 프로그램을 실제로 실행해도 좋은 기회에만 기동명령을 발생하고, 이에 따라 메인 제어부는 다른 프로그램의 실행상황과의 균형에 의해, 소프트웨어 음원의 프로그램을 실제로 실행해도 좋은 기회에만 기공명령을 발생할 수 있으며, 소프트웨어 음원의 프로그램과 그 밖의 프로그램을 적절히 시분할 제어하여 병행하여 실행시킬 수 있는 한편, 소프트웨어 음원(SSM)에 있어서 상기 기동명령에 따라 파형데이터 생성처리를 실제로 기동한 기회만큼 통산적으로 상기 소정 시간내에 소정 샘플수 만큼의 파형데이터를 생성시키도록 파형데이터 생성처리를 조정하는 조정처리수단을 구비했으므로, 소정 시간내에 설정된 다수회의 기동기회중 몇번의 기회에 기동명령이 발생되지 않았다고 해도 기동명령에 따라 파형데이터 생성처리를 실제로 기동한 기회만큼 사용하고, 통산적으로 상기 소정 시간내에 소정 샘플수 만큼의 음파형 데이터를 생성이 완료되도록 제어할 수 있어서, 발음지연 문제를 해결할 수 있다. 따라서, 완전한 멀티 태스크기능을 갖지 않은 OS상에서 소프트웨어 음원에 의한 음파형 데이터 생성치리와 다른 소프트웨어의 처리를 병행하여 실행시키는 경우에도 음파형 데이터 생성처리 및 다른 소프트웨어의 처리에 지장이 생기지 않도록 할 수 있다는 뛰어난 효과를 가진다. 즉, 다른 소프트웨어 처리의 영향으로 인해 음파형 데이터 생성처리의 기동명령 발생회수가 상대적으로 줄었다고 해도, 통산적으로 상기 소정 시간내에 소정 샘플수 만큼의 음파형 데이터를 생성이 완료하도록 제어되므로, 발음지연 등의 지장이 생기지 않게 된다. 반대로, 음파형 데이터 생성처리를 고정된시분할적 처리시간에 수행하지 않음으로써 다른 소프트웨어의 처리 실행이 음파형 데이터 생성처리에 의해 저해되어 그 처리가 지연되는 문제가 생기지 않도록 할 수 있다.
그런 경우, 각 기동명령에 대응하는 시점에 있어서 그 시점까지 생성처리해야 할 파형데이터 미처리량의 함수로서 상기 시점의 1기동명령에 따라 생성해야 할 파형데이터양을 결정하고, 상기 결정된 파형데이터양 만큼의 파형데이터를 생성하는 처리를 상기 1기동명령에 따라 실행하도록 함으로써, 상기 함수를 적절히 결정함으로써 생성처리해야 할 파형데이터 미처리량의 균형에 의해 1기동명령에 따라 생성해야 할 파형데이터양을 적절히 결정할 수 있으며, 1기동명령에 대응하는 소프트웨어 음원의 처리에 의해 메인제어부의 작업이 점유됨으로써 다른 처리의 실행이 저해되는 일이 발생할 확률을 가능한 한 낮게 제어할 수 있게 된다.
또, 본 발명의 제4관점에 의하면 OS 오퍼레이팅 시스템이 생성이 끝난 파형데이터를 수수하기 위한 인터페이스로서, 제1 인터페이스와는 별도로 제3인터페이스를 가지고 있으며, 또 오퍼레이팅 시스템에 드라이버로서 인스톨된 어플리케이션 소프트인 사운드 프로그램이 제2 인터페이스를 통해 입력된 연주정보에 의거해서 파형데이터를 생성하고, 그 파형데이터를 제3인터페이스를 통해 입력된 파형데이터와 동기를 취해 혼합하고, 혼합된 파형데이터를 제1인터페이스를 통해 OS에 인가한다. 따라서, 적절한 별도의 어플리케이션 소프트로부터 발생한 파형데이터를 제3인터페이스로부터 입력하고, 이 파형데이터와, 적절한 별도의 어플리케이션 소프트로부터 제2인터페이스를 통해 입력된 연주정보에 의거해서 생성된 파형데이터를 타이밍을 맞춰서 재생할 수 있게 된다.
또, 제3 인터페이스를 통해 입력된 파형데이터를 초기치로 하고, 연주정보에 의거해서 생성된 파형데이터를 상기 초기치에 누산함으로써 파형데이터를 혼합하도록 하면, 연주정보에 의거한 파형데이터의 생성타이밍에 좌우되지 않고, 파형데이터를 동기를 취해 혼합할 수 있게 되므로, 타이밍을 맞춘 파형데이터의 재생을 안정하게 행할 수 있게 된다.
도1은 본 발명의 제1관점에 따른 실시형태의 소프트웨어 시스템 구성을 대략 나타낸 도면,
도2는 본 발명의 제2관점에 따른 실시형태의 소프트웨어 시스템 구성을 대략 나타낸 도면,
도 3은 본 발명의 일실시형태에 관한 음원시스템의 하드웨어 구성예를 나타낸 전체 블록도,
도 4는 본 발명의 일예로서 채용한 소프트웨어에 의한 악음생성처리의 개략을 설명하는 도면,
도5는 본 발명의 일실시형태에서 채용 가능한 〔대책1〕의 일예를 나타낸 설명도,
도6은 본 발명의 일실시형태에서 채용 가능한 〔대책1〕의 또다른 예를 나타낸 설명도,
도7은 본 발명의 일실시형태에서 채용 가능한 〔대책3〕의 일예를 나타낸 설명도,
도8은 도3의 CPU에 의해 실행되는 소프트웨어 음원 프로그램의 메인 루틴의 일예를 나타낸 플로우차트,
도9는 도8에 있어서의 초기설정처리의 일예를 나타낸 플로우차트,
도10은 도8에 있어서의 MIDI처리에서 실행되는 노트 온 이벤트 처리의 일예를 나타낸 플로우차트,
도11은 도8에 있어서의 MIDI처리에서 실행되는 노트 오프 이벤트처리의 일예를 나타낸 플로우차트,
도12는 도8에 있어서 음원처리1의 일예를 나타낸 플로우차트,
도13은 도3의 DMA 컨트롤러에 의한 인터럽트 처리의 일예를 나타낸 플로우차트,
도14는 도3의 DMA 컨트롤러로부터의 반환요구에 의거해서 실행되는 도8의 음원처리2의 일예를 나타낸 플로우차트,
도15는 도3의 DMA 컨트롤러로부터의 리셋요구에 의거해서 실행되는 도8의 음원처리2의 일예를 나타낸 플로우차트,
도16은 본 발명의 일실시형태에서 채용 가능한 〔대책1]의 또다른 예를 나타낸 것으로, 내부 인터럽트신호의 발생과 악음데이터 생성량의 관계의 일예를 나타낸 설명도,
도17은 도1의 페이크 MIDI 드라이버에 있어서의 프로그램예를 나타낸 플로우차트,
도18은 도1의 소프트웨어 음원 모듈에 전속된 어플리케이션 소프트에 포함되는 MIDI 이벤트처리의 프로그램예를 나타낸 플로우차트,
도19는 생성량(SR)을 지연량(OR)의 함수로서 결정할 때의 함수 특성의 일예를 나타낸 도면,
도20은 생성량(SR)을 지연량(OR)의 함수로서 결정할 때의 함수 특성의 또다른 일예를 나타낸 도면,
도21은 발음 채널수를 지연량(OR)의 함수로서 결정할 때의 함수 특성의 일예를 나타낸 도면,
도22는 어플리케이션 레벨의 소프트웨어 음원을 실시하는 소프트웨어 시스템 구성의 종래예를 나타낸 도면,
도23은 종래 공지된 소프트웨어 음원 모듈의 개념적 구성예를 나타낸 도면,
도24는 MIDI 메시지를 출력하는 어플리케이션 소프트를 실시하는 시스템구성의 종래예를 나타낸 도면,
도25는 본 발명의 제4관점에 따른 실시형태의 소프트웨어 시스템구성을 대략 나타낸 도면,
도26은 도25의 시스템에서 도3의 CPU에 의해 실행되는 사운드 모듈 프로그램의 메인 루틴의 일예를 나타낸 플로우차트,
도27은 도25의 시스템에서 어플리케이션 소프트(APS1)가 재생중인 데이터의 이벤트 타이밍에서 실행하는 처리의 일예를 나타낸 플로우차트,
도28은 도26에 있어서 WAVE 처리의 일예를 나타낸 플로우차트,
도29는 도3의 DMA 컨트롤러로부터의 반환요구에 의거해서 실행되는 도26의 음원처리2의 일예를 나타낸 플로우차트,
도30은 도3의 DMA 컨트롤러로부터의 리셋요구에 의거해서 실행되는 도26의 음원처리2의 일예를 나타낸 플로우차트.
〈도면의 주요부분에 대한 부호의 설명〉
SSM:소프트웨어 음원 모듈
APS1, APS2:어플리케이션 소프트
IF1, IF2:제1 및 제2 인터페이스
FMD:페이크 MIDI 드라이버
1:MIDI 2:타이머
3:CPU 4:ROM
5:RAM 6:데이터 및 어드레스 버스
7:마우스 8:키보드
9:디스플레이 10:하드디스크장치
11: DMA 컨트롤러 12:DAC
13:사운드 시스템

Claims (8)

  1. 제공되는 연주정보를 바탕으로 악음생성처리를 수행하는 소프트웨어 음원 프로그램을 탑재한 컴퓨터를 이용하여 악음 파형을 생성하는 방법에 있어서,
    상기 컴퓨터의 제어부에 의해, 상기 소프트웨어 음원 프로그램에 대하여 비주기적으로 기동명령을 발생하는 제1단계와,
    상기 기동명령에 응하여 기동된 상기 소프트웨어 음원 프로그램을 상기 제어부에 의해 실행하는 제2단계로서, 상기 소프트웨어 음원 프로그램에 의해 수행되는 악음생성처리는, 상기 기동명령이 발생한 기동기회에서만, 해당 기동명령 이전의 기동명령이 발생하지 않은 기동기회분의 악음파형 샘플 데이터를 포함시켜 소정 수의 악음파형 샘플 데이터를 생성하는 것인, 제2단계를 포함하는, 악음 생성 방법.
  2. 연주 정보를 바탕으로 악음 파형을 생성하는 악음 생성 장치에 있어서,
    악음 생성 프로그램을 포함하는 복수의 프로그램을 저장하는 저장 유닛과,
    상기 저장 유닛에 저장된 상기 프로그램들을 병행적으로 동시에 실행할 수 있고 복수의 내부 인터럽트 신호가 비주기적으로 생성되도록 하며 상기 내부 인터럽트 신호에 응하여 상기 악음 생성 프로그램을 기동시켜 상기 연주 정보를 바탕으로 악음 파형을 생성하는 처리 유닛으로서, 상기 처리 유닛에 의해 기동된 상기 악음 생성 프로그램은, 특정 개수의 악음 파형 샘플이 상기 악음 생성 프로그램의 기동시마다 생성되도록 가변적으로 명령하는 제1단계 및 상기 악음 생성 프로그램의 기동시마다 상기 제1단계에 의해 가변적으로 명령된 상기 특정 개수의 악음 파형 샘플을 생성하는 제2단계를 포함하는 것인, 처리 유닛과,
    상기 처리 유닛에 의해 생성된 상기 악음 파형 샘플 데이터를 임시 저장하는 버퍼 유닛과,
    상기 버퍼 유닛으로부터 상기 저장된 악음 파형 샘플 데이터를 순차적으로 읽어냄으로써 악음 파형을 재생하는 재생 유닛과,
    상기 처리 유닛이 더 이상 상기 재생 유닛에 의한 악음 파형 재생에 맞춰 상기 악음 파형 샘플 데이터를 생성할 수 없게 되는 시점에서, 상기 처리 유닛에 의해 현재 실행되고 있는 악음 생성 처리를 리셋시키고 이어서 상기 악음 생성 처리가 상기 처리 유닛에 의해 다시 시작되도록 하여 상기 시점 이후의 재생을 위한 추가의 악음 파형을 생성하도록 하는 제어 유닛을 포함하는 악음 생성 장치.
  3. 제공되는 연주정보를 바탕으로 악음생성처리를 수행하는 소프트웨어 음원 프로그램을 탑재한 컴퓨터를 이용하여 악음 파형을 생성하는 방법에 있어서,
    상기 컴퓨터의 제어부에 의해, 상기 소프트웨어 음원 프로그램에 대하여 비주기적으로 기동명령을 발생하는 제1단계와,
    상기 기동명령에 응하여 기동된 상기 소프트웨어 음원 프로그램을 상기 제어부에 의해 실행하는 제2단계로서, 상기 소프트웨어 음원 프로그램에 의해 수행되는 악음생성처리는, 상기 기동명령이 발생한 기동기회에서만, 해당 기동명령 이전의 기동명령이 발생하지 않은 기동기회분의 악음파형 샘플 데이터를 포함시켜 소정 수의 악음파형 샘플 데이터를 생성하는 것인, 제2단계와,
    상기 생성된 악음 파형 샘플 데이터를 버퍼에 임시 저장하는 제3단계와,
    상기 버퍼로부터 상기 저장된 악음 파형 샘플 데이터를 순차적으로 읽어냄으로써 악음 파형을 재생하는 제4단계와,
    상기 제2단계가 더 이상 상기 제4단계에 의한 악음 파형 재생에 맞춰 상기 악음 파형 샘플 데이터를 생성할 수 없게 되는 시점에서, 상기 제3단계에 의해 현재 실행되고 있는 상기 악음 생성 처리를 리셋시키고 이어서 상기 악음 생성 처리가 다시 시작되도록 하여 상기 시점 이후의 재생을 위한 추가의 악음 파형을 생성하는 제5단계를 포함하는 악음 생성 방법.
  4. 제공되는 연주정보를 바탕으로 악음생성처리를 수행하는 소프트웨어 음원 프로그램을 탑재한 컴퓨터를 이용하여 악음 파형을 생성하는 방법에 있어서,
    상기 컴퓨터의 제어부에 의해, 상기 소프트웨어 음원 프로그램에 대하여 비주기적으로 기동명령을 발생하여 상기 악음생성처리를 기동하는 제1단계와,
    상기 제1단계에 의해 상기 악음생성처리가 기동될 경우에, 상기 제1단계에 의한 현재 기동 시점에서 생성가능한 악음 파형 샘플 데이터의 목표 개수를 결정하고 상기 현재 기동에 응하여 생성될 악음 파형 샘플 데이터의 특정 개수는 상기 목표 개수의 함수로서 결정하는 제2단계와,
    상기 컴퓨터의 제어부가 상기 제1단계에 의해 기동된 상기 악음생성처리를 실행하도록 함으로써 상기 현재 기동에 응하여 상기 특정 개수의 악음 파형 샘플 데이터를 생성하는 제3단계를 포함하는 악음 생성 방법.
  5. 제공되는 연주정보를 바탕으로 악음생성처리를 수행하는 소프트웨어 음원 프로그램을 탑재한 컴퓨터를 이용하여 악음 파형을 생성하는 방법에 있어서,
    상기 컴퓨터의 제어부에 의해, 상기 소프트웨어 음원 프로그램에 대하여 간헐적으로 기동명령을 발생하는 제1단계와,
    상기 기동명령에 응하여 기동된 상기 소프트웨어 음원 프로그램을 상기 제어부에 의해 실행하여 복수의 악음 파형 샘플 데이터를 집단적으로 생성하며 이 생성된 악음 파형 샘플 데이터를 버퍼에 일시적으로 저장하는 제2단계로서, 상기 소프트웨어 음원 프로그램에 의해 수행되는 악음생성처리는, 상기 기동명령이 발생한 기동기회에서만, 해당 기동명령 이전의 기동명령이 발생하지 않은 기동기회분의 악음파형 샘플 데이터를 포함시켜 상기 복수의 악음파형 샘플 데이터를 생성하는 것인, 제2단계와,
    상기 버퍼로부터 상기 저장된 악음 파형 샘플 데이터를 순차적으로 읽어냄으로써 악음 파형을 재생하는 제3단계와,
    상기 제2단계가 더 이상 상기 제3단계에 의한 상기 악음 파형의 재생에 맞춰 상기 악음 파형 샘플을 생성할 수 없게 되는 시점에서, 상기 제2단계에 의해 현재 실행되고 있는 상기 악음생성처리를 리셋시키고 이어서 상기 악음생성처리가 상기 제2단계에 의해 다시 시작되도록 하여 상기 시점 이후의 재생을 위한 추가의 악음 파형을 생성하는 제4단계를 포함하는 악음 생성 방법.
  6. 연주 정보를 바탕으로 악음 파형을 생성하는 악음 생성 장치에 있어서,
    악음 생성 프로그램을 포함하는 복수의 프로그램을 저장하는 저장 유닛과,
    상기 저장 유닛에 저장된 상기 프로그램들을 병행적으로 동시에 실행할 수 있고 복수의 내부 인터럽트 신호가 비주기적으로 생성되도록 하며 상기 내부 인터럽트 신호에 응하여 상기 악음 생성 프로그램을 기동시켜 상기 연주 정보를 바탕으로 악음 파형을 생성하는 처리 유닛으로서, 상기 처리 유닛에 의해 기동된 상기 악음 생성 프로그램은, 특정 개수의 악음 파형 샘플이 상기 악음 생성 프로그램의 기동시마다 생성되도록 가변적으로 명령하는 제1단계, 및 상기 악음 생성 프로그램의 기동시마다 상기 제1단계에 의해 가변적으로 명령된 상기 특정 개수의 악음 파형 샘플을 생성하는 제2단계를 포함하는 것인, 처리 유닛을 포함하는 악음 생성 장치.
  7. 연주 정보를 공급하는 공급 유닛과,
    악음 파형 데이터를 일시적으로 저장하는 버퍼 유닛과,
    상기 버퍼로부터 상기 저장된 악음 파형 샘플 데이터를 순차적으로 읽어냄으로써 악음 파형을 재생하는 재생 유닛과,
    상기 저장 유닛에 저장된 상기 프로그램들을 병행적으로 동시에 실행할 수 있고 복수의 내부 인터럽트 신호가 비주기적으로 생성되도록 하며 상기 내부 인터럽트 신호에 응하여 상기 악음 생성 프로그램을 기동시켜 상기 연주 정보를 바탕으로 악음 파형을 생성하는 처리 유닛으로서, 상기 연주 정보는 상기 재생 유닛의 재생 타이밍 이전에 상기 공급 유닛에 의해 제공되는 것이고 상기 처리 유닛에 의해 기동된 상기 악음 생성 프로그램은, 상기 악음 생성 프로그램의 현재 기동 시점에서 생성가능한 악음 파형 샘플의 목표 개수를 결정하는 제1단계, 및 상기 악음 생성 프로그램의 상기 현재 기동에 응하여 특정 개수의 악음 파형 샘플을 생성하는 제2단계로서, 상기 특정 개수는 상기 목표 개수의 함수로서 결정되며 생성된 악음 파형 샘플은 상기 버퍼 유닛에 일시적으로 저장되는, 제2단계를 포함하는 것인, 처리 유닛을 포함하는, 악음 생성 장치.
  8. 연주 정보를 바탕으로 악음 파형을 생성하는 악음 생성 장치에 있어서,
    악음 생성 프로그램을 포함하는 복수의 프로그램을 저장하는 저장 유닛과,
    상기 저장 유닛에 저장된 상기 프로그램들을 병행적으로 동시에 실행할 수 있고 복수의 내부 인터럽트 신호가 비주기적으로 생성되도록 하며 상기 내부 인터럽트 신호에 응하여 상기 악음 생성 프로그램을 기동시켜 상기 연주 정보를 바탕으로 악음 파형을 생성하는 처리 유닛으로서, 상기 처리 유닛에 의해 기동된 상기 악음 생성 프로그램은, 상기 악음 생성 프로그램의 기동시마다 복수의 악음 파형 샘플을 집단적으로 생성하는 단계를 포함하는 것인, 처리 유닛과,
    상기 처리 유닛에 의해 생성된 상기 악음 파형 샘플을 일시적으로 저장하는 버퍼 유닛과,
    상기 버퍼 유닛으로부터 저장된 악음 파형 샘플을 순차적으로 읽어냄으로써 악음 파형을 재생하는 재생 유닛을 포함하며,
    상기 처리 유닛은, 상기 처리 유닛이 더 이상 상기 재생 유닛에 의한 상기 악음 파형의 재생에 맞춰 상기 악음 파형 샘플을 생성할 수 없게 되는 시점에서, 상기 처리 유닛에 의해 현재 실행되고 있는 악음생성처리를 리셋시키고 이어서 상기 악음생성처리가 상기 처리 유닛에 의해 다시 시작되도록 하여 상기 시점 이후의 재생을 위한 추가의 악음 파형을 생성하는 단계를 포함하는 제어 프로그램을 실행하는, 악음 생성 장치.
KR1020040057745A 1996-01-17 2004-07-23 악음 생성 방법 및 장치 KR100500077B1 (ko)

Applications Claiming Priority (4)

Application Number Priority Date Filing Date Title
JPJP-P-1996-00024748 1996-01-17
JP2474896 1996-01-17
JPJP-P-1996-00083157 1996-03-12
JP8083157A JP2970526B2 (ja) 1996-01-17 1996-03-12 コンピュータソフトウェアを用いた音源システム

Related Parent Applications (1)

Application Number Title Priority Date Filing Date
KR1019970001193A Division KR100478469B1 (ko) 1996-01-17 1997-01-16 컴퓨터소프트웨어를이용한음원시스템

Publications (1)

Publication Number Publication Date
KR100500077B1 true KR100500077B1 (ko) 2005-07-12

Family

ID=26362326

Family Applications (2)

Application Number Title Priority Date Filing Date
KR1019970001193A KR100478469B1 (ko) 1996-01-17 1997-01-16 컴퓨터소프트웨어를이용한음원시스템
KR1020040057745A KR100500077B1 (ko) 1996-01-17 2004-07-23 악음 생성 방법 및 장치

Family Applications Before (1)

Application Number Title Priority Date Filing Date
KR1019970001193A KR100478469B1 (ko) 1996-01-17 1997-01-16 컴퓨터소프트웨어를이용한음원시스템

Country Status (7)

Country Link
US (1) US6023016A (ko)
EP (1) EP0785539B1 (ko)
JP (1) JP2970526B2 (ko)
KR (2) KR100478469B1 (ko)
CN (3) CN1545084B (ko)
DE (1) DE69705434T2 (ko)
SG (1) SG65634A1 (ko)

Families Citing this family (11)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6366971B1 (en) * 1998-01-09 2002-04-02 Yamaha Corporation Audio system for playback of waveform sample data
JP4240575B2 (ja) * 1998-05-15 2009-03-18 ヤマハ株式会社 楽音合成方法、記録媒体および楽音合成装置
JP3614061B2 (ja) 1999-12-06 2005-01-26 ヤマハ株式会社 自動演奏装置及び自動演奏プログラムを記録したコンピュータ読取り可能な記録媒体
US7319764B1 (en) * 2003-01-06 2008-01-15 Apple Inc. Method and apparatus for controlling volume
EP1555772A3 (en) 2004-01-15 2013-07-17 Yamaha Corporation Remote control method of external devices
US20060155543A1 (en) * 2005-01-13 2006-07-13 Korg, Inc. Dynamic voice allocation in a vector processor based audio processor
JP4966285B2 (ja) 2008-10-30 2012-07-04 株式会社東芝 情報処理装置、エフェクトプログラムおよびコンテンツ補正処理方法
US8566721B2 (en) * 2009-04-30 2013-10-22 Apple Inc. Editing key-indexed graphs in media editing applications
US8286081B2 (en) * 2009-04-30 2012-10-09 Apple Inc. Editing and saving key-indexed geometries in media editing applications
US8383924B2 (en) * 2010-03-10 2013-02-26 Yamaha Corporation Musical tone signal generating apparatus
US8781613B1 (en) * 2013-06-26 2014-07-15 Applifier Oy Audio apparatus for portable devices

Family Cites Families (20)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US4373416A (en) * 1976-12-29 1983-02-15 Nippon Gakki Seizo Kabushiki Kaisha Wave generator for electronic musical instrument
JPS55500959A (ko) * 1978-12-11 1980-11-13
JPH0743591B2 (ja) * 1988-03-08 1995-05-15 ヤマハ株式会社 楽音発生制御装置
US5086475A (en) * 1988-11-19 1992-02-04 Sony Corporation Apparatus for generating, recording or reproducing sound source data
US5319151A (en) * 1988-12-29 1994-06-07 Casio Computer Co., Ltd. Data processing apparatus outputting waveform data in a certain interval
JP2576617B2 (ja) * 1988-12-29 1997-01-29 カシオ計算機株式会社 処理装置
US5121667A (en) * 1989-11-06 1992-06-16 Emery Christopher L Electronic musical instrument with multiple voices responsive to mutually exclusive ram memory segments
JP2797142B2 (ja) * 1990-07-02 1998-09-17 カシオ計算機株式会社 電子楽器用処理装置
US5200564A (en) * 1990-06-29 1993-04-06 Casio Computer Co., Ltd. Digital information processing apparatus with multiple CPUs
US5054360A (en) * 1990-11-01 1991-10-08 International Business Machines Corporation Method and apparatus for simultaneous output of digital audio and midi synthesized music
JPH0573046A (ja) * 1991-06-27 1993-03-26 Yamaha Corp 楽音信号演算処理装置
US5283386A (en) * 1991-08-30 1994-02-01 Casio Computer Co., Ltd. Musical-tone signal generating apparatus and musical-tone controlling apparatus including delay means and automatic reset means
JP2722907B2 (ja) * 1991-12-13 1998-03-09 ヤマハ株式会社 波形発生装置
JP2743726B2 (ja) * 1992-07-07 1998-04-22 ヤマハ株式会社 電子楽器
JP2768168B2 (ja) * 1992-09-18 1998-06-25 ヤマハ株式会社 楽音合成装置
US5331111A (en) * 1992-10-27 1994-07-19 Korg, Inc. Sound model generator and synthesizer with graphical programming engine
JPH07146679A (ja) * 1992-11-13 1995-06-06 Internatl Business Mach Corp <Ibm> 音声データを変換する方法及びシステム
US5613147A (en) * 1993-01-08 1997-03-18 Yamaha Corporation Signal processor having a delay ram for generating sound effects
JP2850707B2 (ja) * 1993-06-15 1999-01-27 ヤマハ株式会社 楽音制御装置
US5596159A (en) * 1995-11-22 1997-01-21 Invision Interactive, Inc. Software sound synthesis system

Also Published As

Publication number Publication date
EP0785539A1 (en) 1997-07-23
CN1932969A (zh) 2007-03-21
EP0785539B1 (en) 2001-07-04
DE69705434T2 (de) 2002-05-16
CN1545084A (zh) 2004-11-10
CN1159698C (zh) 2004-07-28
SG65634A1 (en) 1999-06-22
CN1932969B (zh) 2011-03-23
KR100478469B1 (ko) 2005-09-14
CN1164726A (zh) 1997-11-12
JP2970526B2 (ja) 1999-11-02
DE69705434D1 (de) 2001-08-09
JPH09258737A (ja) 1997-10-03
US6023016A (en) 2000-02-08
KR970059908A (ko) 1997-08-12
CN1545084B (zh) 2010-11-24

Similar Documents

Publication Publication Date Title
KR100421589B1 (ko) 악음생성방법및장치
KR100500077B1 (ko) 악음 생성 방법 및 장치
KR100386403B1 (ko) 하드웨어및소프트웨어음원을이용하는악음발생방법
USRE41297E1 (en) Tone waveform generating method and apparatus based on software
KR100302626B1 (ko) 악음생성장치 및 방법
JP3221314B2 (ja) 楽音合成装置及び方法
JP3572847B2 (ja) コンピュータソフトウェアを用いた音源システム及び方法
US5918301A (en) Music apparatus with complete replay session after incomplete play session
JP3003559B2 (ja) 楽音生成方法
US11042380B2 (en) Apparatus, method and computer program for processing instruction
JP3632744B2 (ja) 音生成方法
JP3781171B2 (ja) 楽音発生方法
JP3627590B2 (ja) 音生成方法
JP2005049497A (ja) 音源回路の制御プログラムおよび音源回路の制御装置
JP3139490B2 (ja) 楽音生成装置及び方法
JP2000155572A (ja) 音源装置
JPH10116074A (ja) 自動演奏装置及び自動演奏方法並びに自動演奏制御プログラムを記録した媒体
JP2003186470A (ja) 複数音源ドライバの制御方法
JP2005292858A (ja) 楽音発生方法及び装置

Legal Events

Date Code Title Description
A107 Divisional application of patent
A201 Request for examination
E902 Notification of reason for refusal
E701 Decision to grant or registration of patent right
GRNT Written decision to grant
FPAY Annual fee payment

Payment date: 20110519

Year of fee payment: 7

LAPS Lapse due to unpaid annual fee