Vibration control system, program, game system, game program, and method
Patent Information
- Authority / Receiving Office
- JP · JP
- Patent Type
- Applications
- Current Assignee / Owner
- NINTENDO CO LTD
- Filing Date
- 2024-11-21
- Publication Date
- 2026-06-30
Smart Images

Figure 00000000_0000_ABST
Abstract
Description
Technical Field
[0001] The present disclosure relates to a vibration control system, a program, a game system, a game program, and a method.
Background Art
[0002] Conventionally, there is a game system that gives a vibration effect to a user who plays a game. For example, Japanese Patent Application Laid-Open No. 2016-202486 (Patent Document 1) discloses a vibration signal generation system used in a game.
Prior Art Documents
Patent Documents
[0003]
Patent Document 1
Summary of the Invention
Problems to be Solved by the Invention
[0004] There has been room for improvement in the reality and variation of the vibration sensation in conventional game systems.
Means for Solving the Problems
[0005] (Configuration 1) A vibration control system according to an embodiment is a vibration control system in a game system having a vibration motor. The vibration control system includes impact event detection means for determining whether an impact event has occurred, and first vibration instruction data generation means for generating vibration instruction data for vibrating the vibration motor by specifying a desired frequency, an amplitude corresponding to the maximum input voltage of the vibration motor or the maximum output voltage of an amplifier for controlling the vibration motor, and a period of two wavelengths or less of the frequency, based on the detection of the occurrence of the impact event by the impact event detection means, and first vibration control means for controlling the vibration motor using control data generated based on the vibration instruction data generated based on the detection of the occurrence of the impact event.
[0006] (Configuration 2) In Configuration 1, the first vibration instruction data generation means designates a period that is equal to or less than one wavelength of the frequency.
[0007] (Configuration 3) In Configuration 1 or Configuration 2, there are further provided: second vibration instruction data generation means for generating vibration instruction data for stopping the vibration of the vibration motor; and second vibration control means for controlling the vibration motor using control data generated based on the vibration instruction data for stopping the vibration of the vibration motor after vibration control based on the vibration instruction data generated based on the detection of the occurrence of an impact event.
[0008] (Configuration 4) In Configuration 3, there are further provided: normal event detection means for determining whether a normal event, which is an event other than an impact event, has occurred; third vibration instruction data generation means for designating a desired frequency, a desired amplitude, and a desired period and generating vibration instruction data for vibrating the vibration motor based on the detection of the occurrence of the normal event by the normal event detection means; and third vibration control means for controlling the vibration motor using control data generated based on the vibration instruction data generated based on the detection of the occurrence of the normal event.
[0009] (Configuration 5) In Configuration 4, the second vibration control means controls the vibration motor using control data for stopping the vibration of the vibration motor after vibration control based on the vibration instruction data generated based on the detection of the occurrence of the normal event.
[0010] (Configuration 6) In Configuration 4, when neither an impact event nor a normal event is detected, the first vibration control means functions as the second vibration control means by designating vibration instruction data with an amplitude of zero.
[0011] (Configuration 7) In Configuration 3, after the vibration control based on the vibration instruction data generated based on the detection of the occurrence of an impact event ends, during a first period, the second vibration control means outputs control data to the vibration motor such that the amplitude gradually decreases from the value at the end.
[0012] (Configuration 8) In Configuration 7, at each of a plurality of time points during the first period, the second vibration control means outputs control data to the vibration motor that decreases the amplitude over time and advances the phase over time.
[0013] (Configuration 9) In Configuration 7 or Configuration 8, the second vibration control means generates control data using the frequency at the end.
[0014] (Configuration 10) In any one of Configurations 7 to 9, the second vibration control means outputs control data to the vibration motor such that the first period is a period equal to or less than one wavelength of the frequency at the end.
[0015] (Configuration 11) In any one of Configurations 1 to 10, the vibration instruction data generated based on the detection of the occurrence of an impact event specifies a wavelength greater than one wavelength and a period of 50 msec or less.
[0016] (Configuration 12) In any one of Configurations 7 to 11, the second vibration control means outputs control data to the vibration motor such that vibration stops within one period of the cycle of the vibration instruction to the vibration motor.
[0017] (Configuration 13) In any one of Configurations 1 to 12, when the first vibration control means starts vibration control based on the vibration instruction data generated based on the detection of the occurrence of an impact event, the first vibration control means outputs control data to the vibration motor using the amplitude indicated by the vibration instruction data generated based on the detection of the occurrence of an impact event.
[0018] (Configuration 14) In Configuration 1, the first vibration control means generates interpolation amplitude data with a cycle shorter than the instruction cycle of the vibration instruction data generated based on the detection of the occurrence of the impact event, and outputs the generated interpolation amplitude data to the vibration motor, based on the vibration instruction data generated based on the detection of the occurrence of the impact event.
[0019] (Configuration 15) In Configuration 14, the first vibration control means generates control data with a short cycle so as to gradually approach the amplitude indicated by the vibration instruction data generated based on the detection of the occurrence of the current impact event from the previous amplitude.
[0020] (Configuration 16) In Configuration 15, the first vibration control means includes a determination means for determining that the previous amplitude is zero. When the determination means determines that the previous amplitude is zero, the control data is not generated so as to gradually approach the amplitude indicated by the vibration instruction data generated based on the detection of the occurrence of the current impact event from the previous amplitude, but the control data corresponding to the amplitude indicated by the vibration instruction data generated based on the detection of the occurrence of the current impact event is generated.
[0021] (Configuration 17) In any of Configurations 1 to 16, when starting the vibration control based on the vibration instruction data generated based on the detection of the occurrence of the impact event, the first vibration control means outputs the control data to the vibration motor using the frequency indicated by the vibration instruction data generated based on the detection of the occurrence of the impact event.
[0022] (Configuration 18) In any of Configurations 1 to 17, the first vibration control means executes an interpolation process for generating control data so as to gradually change from the previous amplitude to the amplitude indicated by the vibration instruction data generated based on the detection of the occurrence of the impact event, except at the start.
[0023] (Configuration 19) In Configuration 18, in the interpolation process, the first vibration control means controls the generation of control data so as to gradually change from the previous frequency to the frequency indicated by the vibration instruction data generated based on the detection of the occurrence of the impact event.
[0024] (Configuration 20) In any of Configurations 1 to 19, further comprising frequency characteristic data storage means for storing frequency characteristic data regarding the voltage that is allowed to be input to the vibration motor at each frequency, or the voltage that is allowed to be output by the amplifier at each frequency, and the first vibration control means refers to the frequency characteristic data based on the frequency indicated by the vibration instruction data generated based on the detection of the occurrence of the impact event, determines the maximum input voltage or the maximum output voltage, and determines the amplitude using the amplitude indicated by the vibration instruction data generated based on the detection of the occurrence of the impact event and the determined maximum input voltage or maximum output voltage.
[0025] (Configuration 21) In Configuration 20, the frequency characteristic data is data indicating the ratio of the voltage that is allowed to be input or the voltage that is allowed to be output at each frequency to the maximum input voltage or the maximum output voltage.
[0026] (Configuration 22) In any of Configurations 1 to 21, the first vibration instruction data generation means detects that an impact event has occurred when a predetermined object has collided during the game progress.
[0027] (Configuration 23) In any of Configurations 7 to 10, the first vibration instruction data generation means designates a period of 50 ms or less.
[0028] (Configuration 24) In any of Configurations 7 to 10, after the end of the first period, the second vibration control means continues to output control data with an amplitude of zero to the vibration motor.
[0029] (Configuration 25) The program in a certain embodiment is a program used in a vibration control system in a game system having a vibration motor. The program causes one or more processors to execute steps of: determining whether an impact event has occurred; generating vibration instruction data for vibrating the vibration motor by specifying an amplitude corresponding to a desired frequency, a maximum input voltage of the vibration motor, or a maximum output voltage of an amplifier for controlling the vibration motor, and a period equal to or less than two wavelengths of the frequency, based on the determination step and on detecting the occurrence of the impact event; and controlling the vibration motor using control data generated based on the vibration instruction data generated based on detecting the occurrence of the impact event.
[0030] (Configuration 26) In Configuration 25, in the step of generating vibration instruction data generated based on detecting the occurrence of the impact event, a period equal to or less than one wavelength of the frequency is specified.
[0031] (Configuration 27) In Configuration 25 or Configuration 26, the program further causes one or more processors to execute steps of: generating vibration instruction data for stopping the vibration of the vibration motor; and controlling the vibration motor using control data generated based on the vibration instruction data for stopping the vibration of the vibration motor after vibration control based on the vibration instruction data generated based on detecting the occurrence of the impact event.
[0032] (Configuration 28) In Configuration 27, the program further includes steps of causing one or more processors to: determine whether a normal event, which is an event other than the impact event, has occurred; generate vibration instruction data for vibrating the vibration motor by specifying a desired frequency, a desired amplitude, and a desired period, based on the determination step and on detecting the occurrence of the normal event; and control the vibration motor using control data generated based on the vibration instruction data generated based on detecting the occurrence of the normal event.
[0033] (Configuration 29) In Configuration 28, the step of controlling the vibration motor using the control data generated based on the vibration instruction data for stopping the vibration of the vibration motor includes, after the vibration control based on the vibration instruction data generated based on the detection of the occurrence of a normal event, a step of controlling the vibration motor using the control data for stopping the vibration of the vibration motor.
[0034] (Configuration 30) In Configuration 28, the step of controlling the vibration motor using the control data generated based on the vibration instruction data generated based on the detection of the occurrence of an impact event includes a step of specifying vibration instruction data with an amplitude of zero when neither an impact event nor a normal event is detected.
[0035] (Configuration 31) In Configuration 27, the step of controlling the vibration motor using the control data generated based on the vibration instruction data for stopping the vibration of the vibration motor includes a step of outputting to the vibration motor control data such that the amplitude gradually decreases from the value at the end in a first period after the vibration control based on the vibration instruction data generated based on the detection of the occurrence of an impact event has ended.
[0036] (Configuration 32) In Configuration 31, the step of controlling the vibration motor using the control data generated based on the vibration instruction data for stopping the vibration of the vibration motor includes a step of outputting to the vibration motor control data that decreases the amplitude and advances the phase with the passage of time at each of a plurality of time points in the first period.
[0037] (Configuration 33) In Configuration 31 or Configuration 32, the step of controlling the vibration motor using the control data generated based on the vibration instruction data for stopping the vibration of the vibration motor includes a step of generating the control data using the frequency at the end.
[0038] (Configuration 34) In any of Configurations 25 to 33, the step of controlling the vibration motor using the control data generated based on the vibration instruction data for stopping the vibration of the vibration motor includes the step of outputting the control data to the vibration motor so that the period is equal to or less than one wavelength of the frequency at the end of the first period.
[0039] (Configuration 35) In any of Configurations 25 to 34, the vibration instruction data generated based on the detection of the occurrence of the impact event specifies a wavelength greater than one wavelength and a period of 50 msec or less.
[0040] (Configuration 36) In any of Configurations 31 to 35, the step of controlling the vibration motor using the control data generated based on the vibration instruction data for stopping the vibration of the vibration motor includes the step of outputting to the vibration motor the control data such that the vibration stops within one period of the cycle of the vibration instruction for the vibration motor.
[0041] (Configuration 37) In any of Configurations 25 to 36, the step of controlling the vibration motor using the control data generated based on the vibration instruction data generated based on the detection of the occurrence of the impact event includes, when starting the vibration control based on the vibration instruction data generated based on the detection of the occurrence of the impact event, the step of outputting the control data to the vibration motor using the amplitude indicated by the vibration instruction data generated based on the detection of the occurrence of the impact event.
[0042] (Configuration 38) In Configuration 25, the step of controlling the vibration motor using the control data generated based on the vibration instruction data generated based on the detection of the occurrence of the impact event includes the step of generating interpolation amplitude data with a cycle shorter than the instruction cycle of the vibration instruction data generated based on the detection of the occurrence of the impact event, and outputting the generated interpolation amplitude data to the vibration motor.
[0043] (Configuration 39) In Configuration 38, the step of controlling the vibration motor using the control data generated based on the vibration instruction data generated based on the detection of the occurrence of the impact event includes the step of generating control data with a short cycle so as to gradually approach the amplitude indicated by the vibration instruction data generated based on the detection of the occurrence of the current impact event from the previous amplitude.
[0044] (Configuration 40) In Configuration 39, the step of controlling the vibration motor using the control data generated based on the vibration instruction data generated based on the detection of the occurrence of the impact event includes the step of determining that the previous amplitude is zero, and when it is determined in the step of determining that the previous amplitude is zero that the previous amplitude is zero, instead of generating control data so as to gradually approach the amplitude indicated by the vibration instruction data generated based on the detection of the occurrence of the current impact event from the previous amplitude, generating control data corresponding to the amplitude indicated by the vibration instruction data generated based on the detection of the occurrence of the current impact event.
[0045] (Configuration 41) In any of Configurations 25 to 40, the step of controlling the vibration motor using the control data generated based on the vibration instruction data generated based on the detection of the occurrence of the impact event includes the step of outputting control data to the vibration motor using the frequency indicated by the vibration instruction data generated based on the detection of the occurrence of the impact event when starting the vibration control based on the vibration instruction data generated based on the detection of the occurrence of the impact event.
[0046] (Configuration 42) In any of Configurations 25 to 41, the step of controlling the vibration motor using the control data generated based on the vibration instruction data generated based on the detection of the occurrence of the impact event includes the step of performing an interpolation process of generating control data so as to gradually change from the previous amplitude to the amplitude indicated by the vibration instruction data generated based on the detection of the occurrence of the impact event except at the start.
[0047] (Configuration 43) In Configuration 42, the step of controlling the vibration motor using the control data generated based on the vibration instruction data generated based on the detection of the occurrence of the impact event includes, in the interpolation process, the step of generating the control data so as to gradually change from the previous frequency to the frequency indicated by the vibration instruction data generated based on the detection of the occurrence of the impact event.
[0048] (Configuration 44) In any of Configurations 25 to 43, the step of controlling the vibration motor using the control data generated based on the vibration instruction data generated based on the detection of the occurrence of the impact event includes, based on the frequency indicated by the vibration instruction data generated based on the detection of the occurrence of the impact event, referring to the frequency characteristic data regarding the voltage that is allowed to be input to the vibration motor at each frequency or the voltage that is allowed to be output by the amplifier at each frequency, determining the maximum input voltage or the maximum output voltage, and determining the amplitude using the amplitude indicated by the vibration instruction data generated based on the detection of the occurrence of the impact event and the determined maximum input voltage or maximum output voltage.
[0049] (Configuration 45) In Configuration 44, the frequency characteristic data is data indicating the ratio of the voltage that is allowed to be input or the voltage that is allowed to be output at each frequency to the maximum input voltage or the maximum output voltage.
[0050] (Configuration 46) In any of Configurations 25 to 45, the step of generating the vibration instruction data based on the detection of the occurrence of the impact event includes the step of detecting that the impact event has occurred when a predetermined object has collided during the game progress.
[0051] (Configuration 47) In any of Configurations 31 to 34, the step of generating vibration instruction data based on the detection of the occurrence of an impact event includes the step of specifying a period of 50 ms or less.
[0052] (Configuration 48) In any of Configurations 31 to 34, the step of controlling the vibration motor using control data generated based on vibration instruction data for stopping the vibration of the vibration motor includes the step of continuously outputting control data with an amplitude of zero to the vibration motor after the end of the first period.
[0053] (Configuration 49) A method in a certain embodiment is a method used in a vibration control system of a vibration motor. The method is executed by one or more processors, and includes the steps of determining whether an impact event has occurred, and based on the detection of the occurrence of the impact event in the determining step, specifying a desired frequency, an amplitude corresponding to the maximum input voltage of the vibration motor or the maximum output voltage of an amplifier for controlling the vibration motor, and a period of two wavelengths or less of the frequency, and generating vibration instruction data for vibrating the vibration motor, and controlling the vibration motor using control data generated based on the vibration instruction data generated based on the detection of the occurrence of the impact event.
[0054] (Configuration 50) A game system in a certain embodiment is a game system having a vibration motor. The game system includes impact event detection means for determining whether an impact event has occurred, and first vibration instruction data generation means for generating vibration instruction data for vibrating the vibration motor by specifying a desired frequency, an amplitude corresponding to the maximum input voltage of the vibration motor or the maximum output voltage of an amplifier for controlling the vibration motor, and a period of two wavelengths or less of the frequency, based on the detection of the occurrence of the impact event by the impact event detection means, and the first vibration instruction data generation means outputs the vibration instruction data generated based on the detection of the occurrence of the impact event for vibrating the vibration motor.
[0055] (Configuration 51) The game program in a certain embodiment is a game program used in a game system having a vibration motor. The game program includes steps performed by one or more processors: determining whether an impact event has occurred; generating vibration instruction data for vibrating the vibration motor by specifying a desired frequency, an amplitude corresponding to the maximum input voltage of the vibration motor or the maximum output voltage of an amplifier that controls the vibration motor, and a period equal to or less than two wavelengths of the frequency, based on the determination that an impact event has been detected; and outputting the vibration instruction data generated based on the detection of the occurrence of the impact event for vibrating the vibration motor.
[0056] (Configuration 52) The method in a certain embodiment is a method used in a game system having a vibration motor. The method is executed by one or more processors and includes steps: determining whether an impact event has occurred; generating vibration instruction data for vibrating the vibration motor by specifying a desired frequency, an amplitude corresponding to the maximum input voltage of the vibration motor or the maximum output voltage of an amplifier that controls the vibration motor, and a period equal to or less than two wavelengths of the frequency, based on the determination that an impact event has been detected; and outputting the vibration instruction data generated based on the detection of the occurrence of the impact event for vibrating the vibration motor.
[0057] (Configuration 53) The vibration control system in a certain embodiment is a vibration control system in a game system having a vibration motor. The vibration control system includes: impact event detection means for determining whether an impact event has occurred; first vibration instruction data generation means for generating vibration instruction data for vibrating the vibration motor by specifying a desired frequency, an amplitude corresponding to the maximum input voltage of the vibration motor or the maximum output voltage of an amplifier that controls the vibration motor, and a period of 50 ms or less, based on the detection of the occurrence of the impact event by the impact event detection means; and first vibration control means for controlling the vibration motor using control data generated based on the vibration instruction data generated based on the detection of the occurrence of the impact event.
Brief Description of the Drawings
[0058]
Figure 1
Figure 2
Figure 3
Figure 4
Figure 5
Figure 6
Figure 7
Figure 8
Figure 9
Figure 10
Figure 11
Figure 12
Figure 13
Figure 14
Figure 15
Figure 16
Figure 17
Figure 18
Figure 19
Figure 20
Embodiments for Carrying Out the Invention
[0059] This embodiment will be described in detail with reference to the drawings. For the same or corresponding parts in the drawings, the same reference numerals are given and the description thereof will not be repeated.
[0060] [Embodiment 1] [A. Overview] A configuration example of the vibration control system 10 that controls the vibration motor 206 in this embodiment will be described.
[0061] FIG. 1 is a schematic diagram showing an example of the vibration control system 10 in the present embodiment. The vibration control system 10 in the present embodiment is applied to, for example, a game system. The processor, memory, communication interface, etc. of the vibration control system 10 constitute a computer. Also, the processor, memory, communication interface, etc. of the game device 100 are also an example of a computer, and the processor, memory, communication interface, etc. of the game controller are also an example of a computer. Note that the computer may be constituted by a plurality of information processing devices, device processors, etc.
[0062] The game device 100 causes a display device such as a TV monitor, LCD, organic EL (Electro Luminescence), or head mounted display (HMD) to display an image or picture to the user according to a program, and advances the game. The user operates the game controller 200 according to the image or picture displayed on the display device. The game device 100 receives an input from the user to the game controller 200, and advances the game according to the input from the user.
[0063] [B. Configuration of Game Device] The game device 100 includes a processor 101, a non-volatile memory 102, a volatile memory 103, and a communication interface (I / F) 104. The processor 101 is a processing entity (processing means) for executing the processing provided by the game device 100. The processor 101 reads the system program 102P1 and the game program 102P2 stored in the non-volatile memory 102, expands them in the volatile memory 103, and executes them. In the present disclosure, the program includes both a single program and a program group including a plurality of programs. In the case of a program group, each program may be stored in a different memory and executed by a different processor. For example, some programs may be executed by the processor 101 and some other programs may be executed by the MCU 201.
[0064] The processor 101 is a processing circuit, for example, a CPU (Central Processing Unit). In this specification, the term "processor" refers to a processing circuit such as a CPU, MPU (Micro Processing Unit), GPU (Graphics Processing Unit), etc., which executes processing according to instruction codes described in a program. In addition to the normal meaning, it also includes hard-wired circuits such as ASICs and FPGAs. Hard-wired circuits such as ASICs and FPGAs have circuits corresponding to the processing to be executed pre-formed. Furthermore, the "processor" in this specification may also include a circuit in which multiple functions such as an SoC (System on Chip) are integrated. The processor 101 may be, for example, an SoC in which the functions of a CPU and a GPU are integrated. Also, in this embodiment, a mode in which processing executed by a single processor is shared and executed by multiple processors in cooperation is also included in this specification as a modification.
[0065] The non-volatile memory 102 is a non-volatile storage device (storage medium) accessible by the processor 101, and for example, an SSD (Solid State Drive), NAND-type flash memory, or hard disk may be used. Note that the non-volatile memory 102 may be a storage medium detachable from the game device 100, such as an optical disk or a cartridge. The system program 102P1 and the game program 102P2 are stored in the non-volatile memory 102. The system program 102P1 is a program that performs basic processing of the game device 100. It also includes a program for transmitting various data stored in the volatile memory 103 to the game controller 200. The game program 102P2 is a program for executing a game, and is stored, for example, in a game cartridge or disk detachably attached to the game device 100, or is downloaded to the non-volatile memory 102 via the Internet. The game program 102P2 includes the vibration file 105.
[0066] The vibration file 105 contains information for instructing vibration effects for each vibration event. The vibration events include events that generate impact vibrations, but may also include events that generate other vibrations. The impact vibration effect is an effect that makes the user feel impactful vibrations occurring during game progress, and is a strong vibration for a short period. For example, it is instructed according to events such as collisions and explosions between objects in the virtual game space, and the firing of guns, etc., and is also used for the expression of beats, etc. More specifically, for the amplitude, an amplitude corresponding to the maximum allowable voltage of the vibration motor 206 is specified. The specified amplitude does not have to match the maximum allowable voltage of the vibration motor 206, and may be an amplitude close to the maximum allowable voltage.
[0067] The specified amplitude may be, for example, 80% or more of the maximum allowable voltage. Also, for a vibration motor with a large output, the output may be 60% or more of the maximum allowable voltage. Also, for the vibration duration, it may be, for example, a period of one wavelength or less at the lower limit frequency that the game program 102P2 can specify. It may be a period of two wavelengths or less. Also, for the vibration duration, it may be a period of 50 ms (milliseconds) or less, and may also be a period of 25 ms or less. The frequency does not have to be particularly restricted. Specifying a low frequency results in a heavy impact vibration, and specifying a high frequency results in a sharp impact vibration. When performing a control input with a period of more than one wavelength (for example, two wavelengths) in a period of 50 ms or less, a stronger impact vibration can be obtained compared to the case of one wavelength. When the vibration period is a short period such as 50 ms, humans recognize the difference between one wavelength and two wavelengths as the difference in the strength of the vibration.
[0068] For example, the frequency may be changed according to the magnitude of the collision in the virtual game space (such as the speed of the collision and the weight of the colliding objects, etc.). That is, the effect of the impact vibration effect can be changed by changing the frequency. The frequency may be restricted by various conditions of the system. The impact event is an event that causes the impact vibration effect, and in other words, is a condition for generating the impact vibration effect.
[0069] Vibration events include normal vibration events as events other than impact vibration events. The normal vibration events may be, for example, vibrations for which a period longer than a certain period (for example, a period longer than two wavelengths) is specified, or events that generate vibrations below a certain level with respect to the maximum allowable voltage of the vibration motor. Also in the normal vibration events, as in the impact vibration events, a desired frequency, a desired amplitude, and a desired period are specified. The game program 102P2 can specify appropriate frequencies, amplitudes, and periods according to the nature of the vibration events.
[0070] The volatile memory 103 is a volatile storage device (storage medium) accessible by the processor 101, and for example, DRAM (Dynamic Random Access Memory) or SRAM (Static Random Access Memory) etc. can be used. The volatile memory 103 has a data area 103B1, an operation data area 103B2, and a vibration instruction data area 103B3. The data area 103B1 is an area that temporarily stores data generated when the processor 101 executes the game program 102P2, for example.
[0071] The operation data area 103B2 is an area that temporarily stores operation data received from the game controller 200. The operation data is data indicating an input by the user to the game controller 200, and is detection values of an acceleration sensor 208, a gyro sensor 209, an operation switch 210, etc.
[0072] The vibration instruction data area 103B3 is an area that temporarily stores vibration instruction data for vibrating the vibration motor 206 provided in the game controller 200. The vibration instruction data area 103B3 can store at least one vibration instruction data corresponding to a certain timing. The vibration instruction data area 103B3 in the present embodiment is configured to be able to store two vibration instruction data corresponding to one timing. Note that in this specification, the term "memory" includes at least both the non-volatile memory 102 and the volatile memory 103.
[0073] The game device 100 communicates with the game controller 200 via the communication interface 104. The communication interface 104 performs wireless communication with the game controller 200 using, for example, an antenna (not shown). The communication method of the wireless communication between the game device 100 and the game controller 200 is arbitrary. In this embodiment, the game device 100 communicates with the game controller 200 in accordance with the Bluetooth (registered trademark) standard. The communication between the game device 100 and the game controller 200 may be wired communication. In this case, the communication interface 104 can be, for example, a terminal conforming to the USB (Universal Serial Bus) standard or the like.
[0074] The game device 100 progresses the game based on the execution of the game program 102P2. In the progress of the game, in the virtual game space, an impact event, which is an expression including a large impact such as an explosion or a collision, may occur. The game device 100 also generates the above-described vibration instruction data based on the occurrence of the impact event and transmits it to the game controller 200. The vibration instruction data will be described in detail later. The game device 100 may generate a plurality of vibration instruction data in order to vibrate the vibration motor 206 at a certain timing. That is, the vibration motor 206 can vibrate based on a plurality of vibration instruction data at a certain timing. In this embodiment, the vibration motor 206 vibrates based on two vibration instruction data at a certain timing. Note that the vibration motor 206 may vibrate based on three or more vibration instruction data at a certain timing.
[0075] [C. Configuration of Game Controller] The game controller 200 includes an MCU (Micro Controller Unit) 201, an amplifier 205, a vibration motor 206, a communication interface (I / F) 207, an acceleration sensor 208, a gyro sensor 209, and an operation switch 210.
[0076] The game controller 200 is typically a controller that is held by the user's both hands or one hand, and receives input from the user by operating the operation switch 210 with the user's fingers. Note that the game controller 200 is not limited to a game controller that is held by the user's hand, and may be, for example, a general-purpose keyboard or mouse equipped with a vibration motor 206, or may be a type that receives input when the user's sole contacts a sensor by being laid on the floor.
[0077] The MCU 201 has a processor 202, a non-volatile memory 203, and a volatile memory 204. The processor 202, the non-volatile memory 203, the volatile memory 204, and the communication interface 207 each have a hardware configuration similar to that of the above-described processor 101, non-volatile memory 102, volatile memory 103, and communication interface 104. Therefore, the description of these configurations will not be repeated. However, for cost reduction, the processor 202 may be a processor with lower processing power than the processor 101.
[0078] The non-volatile memory 203 stores an MCU program 203P. The MCU program 203P includes a program for executing various processes described later, and a program for transmitting the detection values of the operation switch 210, the acceleration sensor 208, and the gyro sensor 209 to the game device 100 via the communication interface 207. Further, in the present embodiment, the MCU program 203P includes a program for generating control data to be transmitted to the amplifier 205 based on the vibration instruction data received from the game device 100. The control data is typically data indicating a voltage value of a waveform for driving the vibration motor 206. The control data is output at a predetermined cycle (unit time). This cycle is called a control cycle. In the present embodiment, the control data is generated based on the vibration instruction data.
[0079] The volatile memory 204 has a vibration instruction data area 204B1, a control data area 204B2, an operation data area 204B3, a current amplitude data area 204V1, a current frequency data area 204V2, a current phase data area 204V3, a previous amplitude data area 204V4, and a previous frequency data area 204V5. The vibration instruction data area 204B1 is an area for temporarily storing the vibration instruction data received from the game device 100. The control data area 204B2 is an area for temporarily storing the control data generated by the processor 202. The operation data area 204B3 is an area for temporarily storing the operation data. The current amplitude data area 204V1, the current frequency data area 204V2, the current phase data area 204V3, the previous amplitude data area 204V4, and the previous frequency data area 204V5 will be described with reference to FIG. 6 described later. Each of the areas for storing various data in the volatile memory 204 can store at least one data corresponding to a certain timing. Each of the areas for storing various data in the volatile memory 204 in the present embodiment stores two data corresponding to a certain timing.
[0080] The content of the control data area 204B2 in the volatile memory 204 is transferred to the amplifier 205, for example, by DMA (Direct Memory Access). The amplifier 205 in the present embodiment is an amplifier that performs PWM (Pulse Width Modulation) control at a frequency of 8 kHz. The amplifier 205 determines the duty ratio every 0.125 ms based on the received control data and supplies power to the vibration motor 206.
[0081] The vibration motor 206 may be, for example, a voice coil motor, an eccentric motor, a linear resonant motor (so-called LRA (Linear Resonant Actuator)), etc., and the type of the motor is not limited. The vibration motor 206 may be a coin-type motor or the like. When the vibration motor 206 is an eccentric motor, a weight with an eccentricity in shape is attached to the rotation axis of the vibration motor 206, and vibration is generated by rotation. Thereby, the vibration motor 206 can apply vibration to the user who is gripping the game controller 200 in which the vibration motor 206 is stored. Note that the vibration motor 206 may correspond to the "vibration module" in the present disclosure.
[0082] The acceleration sensor 208 detects the magnitude of the linear acceleration along a predetermined three-axis direction. Note that the acceleration sensor 208 may detect acceleration in one-axis or two-axis directions. The gyro sensor 209 detects the tilt, angular velocity, angular acceleration, etc. of the game controller 200, and outputs the detection result to the operation data area 204B3.
[0083] The detection results of the acceleration sensor 208 and the gyro sensor 209 are output to the processor 101. The processor 101 in the game device 100 can calculate information regarding the movement and / or posture of the game controller 200 based on the detection results of the acceleration sensor 208 and the gyro sensor 209.
[0084] The operation switch 210 is typically at least one button, key, and / or stick provided on the surface of the game controller 200. The operation switch 210 may be, for example, a button associated with characters such as button A and button B, a cross key for inputting the up, down, left, and right directions, a 3D stick for inputting the tilt direction and tilt amount, etc.
[0085] [D. Flow of Generating Vibration Instruction Data Based on Vibration File] FIG. 2 is a diagram for explaining an example of generating vibration instruction data based on the vibration file 105 in Embodiment 1. In FIG. 2, an example in which the normalized vibration instruction data 114 is generated based on the occurrence of an impact vibration event is explained. The vibration instruction data includes a value for specifying a frequency (hereinafter, frequency value) and a value for specifying an amplitude (hereinafter, amplitude value). One vibration instruction data includes one frequency value and one amplitude value. The processor 101 generates the normalized vibration instruction data 114 based on the vibration file 105.
[0086] In this embodiment, in the vibration file 105 and the vibration instruction data 114, the amplitude value is normalized. On the other hand, in this embodiment, the frequency value is not normalized. In this embodiment, the amplitude value takes a value between 0 and 1. Then, the processor 101 converts it into an amplitude value adjusted by executing a total adjustment process, a frequency characteristic adjustment process, and a clamp adjustment process on the normalized amplitude value in the vibration instruction data 114. Note that these adjustment processes are not essential. In particular, the clamp adjustment process is not necessary when the frequency characteristic adjustment process is executed by the processor 202 on the game controller 200 side (described later). Also, it is not essential to normalize the amplitude value.
[0087] The total adjustment process is an adjustment process for apportioning the amplitude values of two pieces of vibration instruction data with respect to a reference value of 1.0 in order to vibrate the vibration motor 206 at a single identical timing when two pieces of vibration instruction data are generated. The frequency characteristic adjustment process is an adjustment process for adjusting the amplitude value included in the vibration instruction data according to the maximum voltage allowed to be input at that frequency according to the frequency value included in the vibration instruction data. The clamp adjustment process is an adjustment process for determining an amplitude value capable of suppressing a change in unintended behavior during the process of gradually changing the frequency of the vibration motor 206 when the frequency value included in the vibration instruction data is different from the frequency value included in the previous vibration instruction data. By performing the adjustment process of the amplitude value in this way, it is possible to facilitate the production of game programs, increase the intensity of vibration, and enhance the effect of impact vibration. Thereafter, the game device 100 transmits the vibration instruction data 110 after the adjustment process, which will be described later, to the game controller 200. Hereinafter, the contents of various data will be described.
[0088] In the present embodiment, the vibration instruction data specifies the vibration effect for a period of T×N (msec) by designating one or more (N pieces) of the vibration instruction data for each vibration instruction cycle T (msec) in chronological order. By adopting such a data format, it is possible to easily specify a vibration effect in which the amplitude value and the frequency change. The vibration duration may be specified by the duration or the number of waves.
[0089] Subsequently, the specific contents of various data will be described with reference to FIG. 2. In the vibration control system 10 in the present embodiment, the vibration file 105 in the game program 102P2 is referred to by the game device 100, and first, the vibration instruction data 114 is generated.
[0090] In this embodiment, when the amplitude value is "1", the vibration control system 10 operates to apply a voltage value corresponding to the upper limit of the output voltage of the amplifier 205 to the vibration motor 206. For example, in the case of a linear design, when the amplitude value is "0.5", the vibration control system 10 applies a voltage value corresponding to 50% of the upper limit of the output voltage of the amplifier 205 to the vibration motor 206. That is, the value of 0 to 1 indicated by the amplitude value in the vibration instruction data 114 does not represent the voltage value itself, but represents the ratio to the upper limit of the output voltage of the amplifier 205. However, as will be described later, the amplitude value included in the vibration instruction data 114 is adjusted in value by the total adjustment process, the frequency characteristic adjustment process, and the clamp adjustment process.
[0091] The game device 100 executes the various adjustment processes described above to convert the vibration instruction data 114 into the vibration instruction data 110 after the adjustment process described later.
[0092] In such a flow, the game device 100 generates the vibration instruction data 110 after the adjustment process, and transmits the generated vibration instruction data 110 after the adjustment process to the game controller 200. Hereinafter, the details of the various data will be described.
[0093] On the left side of FIG. 2, the vibration file 105 is shown as a table. FIG. 2 shows an example of the vibration file 105 when the game program 102P2 is an adventure game. In the vibration file 105 in the example of FIG. 2, each of the data representing the event name, the event occurrence condition, and the vibration content is associated with each other. The data representing the event occurrence condition includes, for example, the types of two objects. The data representing the vibration content includes the frequency, the number of wavelengths, and the amplitude. Instead of the number of wavelengths, the vibration duration may be specified.
[0094] The table showing the vibration file 105 in the example of FIG. 2 is a table with the event name as the primary key. For the event name "First Impact Event", object 1 "sword" and object 2 "sword" are associated. That is, the first impact event is an event that occurs when an object representing a sword in the virtual space of the game collides with another object representing a sword. Also, for the event name "First Impact Event", the frequency "100", the number of wavelengths "1", and the amplitude "1" are associated. That is, when the first impact event occurs, the voltage corresponding to the maximum output voltage of the amplifier 205 at a frequency of 100 Hz, or the maximum input voltage allowed for the input to the vibration motor 206 is used as the amplitude, indicating that a waveform signal with a frequency of 100 Hz is output to the vibration motor 206 for one wavelength at a frequency of 100 Hz.
[0095] For the event name "Second Impact Event", object 1 "sword" and object 2 "shield" are associated. That is, the second impact event is an event that occurs when an object representing a sword in the virtual space of the game collides with an object representing a shield. Also, for the event name "Second Impact Event", the frequency "50", the number of wavelengths "1", and the amplitude "1" are associated. That is, when the second impact event occurs, the voltage corresponding to the maximum output voltage of the amplifier 205 at a frequency of 50 Hz, or the maximum input voltage allowed for the input to the vibration motor 206 is used as the amplitude, indicating that a waveform signal with a frequency of 50 Hz is output to the vibration motor 206 for one wavelength at a frequency of 50 Hz.
[0096] The event name "Third Impact Event" is associated with object 1 "sword" and object 2 "rock". That is, the Third Impact Event is an event that occurs when an object representing a sword and an object representing a rock collide within the virtual space of the game. Also, the event name "Third Impact Event" is associated with a frequency "50", a wavelength number "2", and an amplitude "1". That is, when the Third Impact Event occurs, a waveform signal with a frequency of 50 Hz is output to the vibration motor 206 for two wavelengths at a frequency of 50 Hz, with the voltage corresponding to the maximum output voltage of the amplifier 205 or the maximum input voltage allowed for the input to the vibration motor 206 as the amplitude. Note that the wavelength number does not have to be an integer multiple.
[0097] Subsequently, the content of the vibration instruction data 114 will be described. The right part of FIG. 2 shows the vibration instruction data 114 generated by the processor 101 based on the vibration file 105. In the First Impact Event, two pieces of vibration instruction data are generated, in the Second Impact Event, four pieces of vibration instruction data are generated, and in the Third Impact Event, eight pieces of vibration instruction data are generated.
[0098] In the vibration instruction data 116A shown in FIG. 2, "1" is specified as the amplitude value and "100" is specified as the frequency value. Also, in the vibration instruction data 116B, "1" is specified as the amplitude value and "50" is specified as the frequency value.
[0099] Regarding the vibration instruction data 114 generated based on the occurrence of the First Impact Event, two pieces of vibration instruction data, namely "(1, 100), (1, 100)", are arranged in time series. The plurality of vibration instruction data included in the vibration instruction data 114 are stored in the order of output to the vibration motor 206. A set of vibration instruction data arranged in time series in the order of output to the vibration motor 206 is referred to as a "time series vibration instruction data group".
[0100] The time-series vibration instruction data group generated based on the occurrence of the second impact event is composed of four vibration instruction data, namely, "(1, 50), (1, 50), (1, 50), (1, 50)". The time-series vibration instruction data group generated based on the occurrence of the third impact event is composed of eight vibration instruction data, namely, "(1, 50), (1, 50), (1, 50), (1, 50), (1, 50), (1, 50), (1, 50), (1, 50)".
[0101] The number of vibration instruction data included in the time-series vibration instruction data group is determined based on the frequency and the number of wavelengths in the vibration file 105. One vibration instruction data is data indicating that, over a period of 5 ms, a waveform with the frequency and amplitude indicated by that vibration instruction data is output to the vibration motor 206. For the first impact event in the vibration file 105, "100 Hz" is associated as the frequency value. When the vibration motor 206 is vibrated at 100 Hz, the period of one wavelength of the vibration waveform is 10 ms. Therefore, the vibration instruction data 114 generated based on the first impact event includes two vibration instruction data obtained by dividing 10 ms by 5 ms.
[0102] For the second impact event in the vibration file 105, "50 Hz" is associated as the frequency value. When the vibration motor 206 is vibrated at 50 Hz, the period of one wavelength of the vibration waveform is 20 ms. Therefore, the vibration instruction data 114 generated based on the second impact event includes four vibration instruction data obtained by dividing 20 ms by 5 ms.
[0103] For the third impact event in the vibration file 105, "50 Hz" is associated as the frequency value. When the vibration motor 206 is vibrated at 50 Hz, the period of two wavelengths of the vibration waveform is 40 ms. Therefore, the vibration instruction data 114 generated based on the third impact event includes eight vibration instruction data obtained by dividing 40 ms by 5 ms.
[0104] Next, a method for determining the period during which control data is output to the vibration motor 206 by one vibration instruction data will be described. In the present disclosure, the period during which control data is output to the vibration motor 206 by one vibration instruction data is referred to as a "vibration instruction cycle". The vibration instruction cycle is determined by the processor 101 according to the characteristics of the vibration motor 206. In this embodiment, as described above, the vibration instruction cycle is 5 ms.
[0105] The processor 101 executes the game program 102P2 to generate vibration instruction data 114, and passes at least one vibration instruction data 114 to the system program 102P1. The system program 102P1 adjusts the received vibration instruction data 114 using an adjustment process and converts it into adjusted vibration instruction data 110. Hereinafter, the frequency characteristic data used in the frequency characteristic adjustment process included in the adjustment process will be described.
[0106] FIG. 3 is a diagram showing frequency characteristic data. The frequency characteristic data shown as a graph in FIG. 3 is data that defines the ratio of the upper limit of the voltage value allowed for input at each frequency to the maximum output voltage of the amplifier. The frequency characteristic adjustment rate on the vertical axis is a value calculated by the upper limit of the voltage value allowed for input at each frequency / the maximum output voltage of the amplifier. The frequency characteristic data is used in the frequency characteristic adjustment process described later. The range of frequencies at which the vibration motor 206 can operate is determined by the characteristics of the vibration motor 206 and the like. In this embodiment, it is in the range of 40 Hz or more and 400 Hz or less. As shown in FIG. 3, the lower limit frequency allowed for driving the vibration motor 206 in this embodiment is 40 Hz. In this embodiment, the "allowed lower limit frequency" means the frequency of the vibration motor 206 that is allowed to be used by the application program. Note that in this embodiment, when the game program 102P designates a frequency outside the range of 40 Hz or more and 400 Hz or less, it is corrected to a value within the range of 40 Hz or more and 400 Hz or less by system software or the like. In this embodiment, when a one-wavelength impact vibration is assumed, a frequency of 200 Hz or less is specified.
[0107] As a characteristic of the vibration motor 206, a maximum input voltage is defined as an allowable voltage for input for each frequency. The upper limit of the input voltage (the voltage input to the vibration motor 206) allowed at each frequency can be determined based on the input voltage when the displacement of the vibrator of the vibration motor 206 reaches the limit value. Since the vibration amount with respect to the input of the vibration motor 206 varies depending on the frequency, the upper limit of the input voltage allowed at each frequency (the input voltage when the displacement of the vibrator reaches the limit value) varies depending on the frequency. The vibration control system 10 of the present embodiment includes frequency characteristic data shown in FIG. 3 for adjusting the amplitude value indicated by the vibration instruction data according to the frequency in consideration of these upper limits of the input voltage.
[0108] The frequency characteristic adjustment rate shown as the vertical axis in FIG. 3 is a value obtained by dividing the upper limit of the input voltage allowed at each frequency by the upper limit of the output voltage of the amplifier 205, and can take a value in the range of 0 to 1. It can be said that the frequency at which the frequency characteristic adjustment rate is low is the frequency at which the vibration amount of the vibrator with respect to the input voltage becomes large.
[0109] Data corresponding to the graph of FIG. 3 may be included in at least one of the system program 102P1 or the game program 102P2. As shown in FIG. 3, the vibration motor 206 in the first embodiment has good vibration efficiency when operating at 100 Hz. When a large voltage is input at this frequency, the vibration becomes too large. Therefore, when operating at 100 Hz, the frequency characteristic adjustment rate drops to 0.5. Also, at frequencies with poor vibration efficiency, the frequency characteristic adjustment rate is increased to prevent the vibration from becoming weak. When operating at 400 Hz or higher, it has the characteristic that the allowable voltage value gradually decreases.
[0110] Subsequently, it will be described that the processor 101 executes the above-described adjustment process on the amplitude value in the vibration instruction data 114 to generate the adjusted vibration instruction data 110. The amplitude value or frequency value of the instructed vibration data after the adjustment process is executed may sometimes be referred to as the adjusted amplitude value or the adjusted frequency value.
[0111] FIG. 4 is a diagram for explaining the adjustment process. The adjustment process is realized by the system program 102P1 being executed by the processor 101. As described above, the vibration control system 10 of the present embodiment is configured to be able to control the vibration motor 206 based on two pieces of vibration instruction data. That is, the system program 102P1 is configured to be able to receive an instruction data set including two pieces of vibration instruction data at a certain timing. Hereinafter, the two pieces of vibration instruction data included in the instruction data set are referred to as "first vibration instruction data" and "second vibration instruction data". Also, the amplitude value specified by the first vibration instruction data is referred to as the "first instructed amplitude value", and the frequency value specified by the first vibration instruction data is also referred to as the "first instructed frequency value". Similarly, the amplitude value specified by the second vibration instruction data is referred to as the "second instructed amplitude value", and the frequency value specified by the second vibration instruction data is also referred to as the "second instructed frequency value".
[0112] The system program 102P1 processes the instruction data set for each of the above-described vibration instruction cycles. For example, when the first impact event and the second impact event in FIG. 2 occur simultaneously, the vibration instruction data 116A may be passed to the system program 102P1 as the first vibration instruction data, and the vibration instruction data 116B may be passed to the system program 102P1 as the second vibration instruction data. In this case, the system program 102P1 vibrates the vibration motor 206 so as to give the user a vibration obtained by combining the vibration by the vibration instruction data 116A and the vibration by the vibration instruction data 116B. That is, the system program 102P1 processes the vibration instruction data 116A and the vibration instruction data 116B for one vibration instruction cycle.
[0113] In the example of FIG. 4, for the sake of simplicity in explaining the adjustment process, an example is shown in which vibration instruction data different from the example shown in FIG. 2 is passed to the system program 102P1. FIG. 4 shows a first vibration instruction cycle, a second vibration instruction cycle, and a third vibration instruction cycle. These periods are consecutive 15 ms periods, and they progress in time series in the order of the first vibration instruction cycle, the second vibration instruction cycle, and the third vibration instruction cycle. In FIG. 4, an example in which different instruction data sets are passed to the system program 102P1 in each vibration instruction cycle is explained.
[0114] First, the conversion of the vibration instruction data in the first vibration instruction cycle will be described below. In the first vibration instruction cycle, an instruction data set including first vibration instruction data specifying a first instruction amplitude value of "0.0" and a first instruction frequency value of "0", and similarly second vibration instruction data specifying a second instruction amplitude value of "0.0" and a second instruction frequency value of "0" is passed to the system program 102P1. That is, in the first vibration instruction cycle, no vibration instruction data is passed to the system program 102P1, or vibration instruction data indicating that the vibration motor 206 is not vibrated is passed. In this case, no adjustment is performed in any of the total adjustment process, the frequency characteristic adjustment process, and the clamp adjustment process, and the amplitude value and the frequency are finally converted as the vibration instruction data 110 while remaining "0.0".
[0115] In the second vibration instruction cycle, an instruction data set including first vibration instruction data specifying a first instruction amplitude value of "0.7" and a first instruction frequency value of "50 Hz" and second vibration instruction data specifying a second instruction amplitude value of "0.5" and a second instruction frequency value of "80 Hz" is passed to the system program 102P1. When the system program 102P1 receives an instruction data set including two pieces of vibration instruction data with non-zero amplitude values, it executes a synthesis adjustment process to adjust the amplitude values indicated by the first vibration instruction data and the second vibration instruction data. The synthesis adjustment process is a process of proportionally dividing so that the total value of the amplitude values indicated by the two pieces of vibration instruction data becomes 1 when the total of the amplitude values indicated by the two pieces of vibration instruction data exceeds 1 within the same vibration instruction cycle.
[0116] Specifically, the processor 101 determines whether the total value of the amplitude value indicated by the first vibration instruction data and the amplitude value indicated by the second vibration instruction data exceeds 1. If the total value does not exceed 1, the processor 101 ends the total adjustment process without changing each amplitude value. If the total value exceeds 1, the processor 101 divides the amplitude value indicated by each vibration instruction data by the total value of the amplitude values indicated by each vibration instruction data. As a result, the amplitude value of the first vibration instruction data after total adjustment is adjusted to "0.58", and the amplitude value of the second vibration instruction data is adjusted to "0.42".
[0117] Next, the frequency characteristic adjustment process will be described. In the frequency characteristic adjustment process, the amplitude value is adjusted using the frequency characteristic data described with reference to FIG. 3. The processor 101 acquires the frequency characteristic adjustment rate at the specified frequency value using the data corresponding to the graph of FIG. 3. For the first vibration instruction data, the processor 101 refers to the frequency characteristic data corresponding to the graph of FIG. 3 and determines that when the vibration motor 206 operates at a frequency of 50 Hz, the frequency characteristic adjustment rate is "1.0". The processor 101 multiplies the amplitude value "0.58" indicated by the first vibration instruction data by the frequency characteristic adjustment rate "1.0" to adjust the amplitude value to "0.58". That is, in this case, since the frequency characteristic adjustment rate at 50 Hz is "1.0", the amplitude value in the first vibration instruction data in the second vibration instruction cycle does not change due to the frequency characteristic adjustment process.
[0118] Similarly, for the second vibration instruction data, the processor 101 determines that when the vibration motor 206 operates at a frequency of 80 Hz, the frequency characteristic adjustment rate is "0.7". The processor 101 multiplies the amplitude value "0.42" indicated by the second vibration instruction data after the total adjustment process by the frequency characteristic adjustment rate "0.7" to adjust the amplitude value to "0.29". In the present embodiment, the third decimal place is rounded off, but the calculation may also be performed for digits after the third decimal place.
[0119] Next, the first vibration instruction data and the second vibration instruction data in the third vibration instruction cycle will be described. In the third vibration instruction cycle, an instruction data set including the first vibration instruction data specifying the first instruction amplitude value "0.7" and the first instruction frequency value "150 Hz" and the second vibration instruction data specifying the second instruction amplitude value "0.5" and the second instruction frequency value "200 Hz" is passed to the system program 102P1. Also in the third vibration instruction cycle, similar to the second vibration instruction cycle, the amplitude values indicated by the first vibration instruction data and the second vibration instruction data are adjusted by combined adjustment. The amplitude value of the first vibration instruction data after the total adjustment in the third vibration instruction cycle is adjusted to "0.58", and the amplitude value of the second vibration instruction data is adjusted to "0.42".
[0120] Next, the processor 101 refers to the frequency characteristic data corresponding to the graph in FIG. 3 and determines that the frequency characteristic adjustment rate is "1.0" when the vibration motor 206 operates at a frequency of 150 Hz. The processor 101 multiplies the amplitude value "0.58" indicated by the first vibration instruction data by the frequency characteristic adjustment rate "1.0" to adjust the amplitude value to "0.58". Regarding the second vibration instruction data in the third vibration instruction cycle, the processor 101 determines that the frequency characteristic adjustment rate is "1.0" when the vibration motor 206 operates at a frequency of 200 Hz. The processor 101 multiplies the amplitude value "0.42" indicated by the second vibration instruction data by the frequency characteristic adjustment rate "1.0" to adjust the amplitude value to "0.42".
[0121] As will be described later, in the game controller 200, when the previous instruction frequency value and the current instruction frequency value are different, the clamp adjustment process is a process of gradually changing the frequency, and in this process, it is a process for suppressing the input voltage to the vibration motor from exceeding the allowable value. The process executed in the game controller 200 described later is a process of gradually approaching the amplitude and frequency indicated from the immediately previous amplitude value and the immediately previous frequency. When the frequency gradually changes within the vibration instruction cycle, it is a process of adjusting the first instruction amplitude value and the second instruction amplitude value in accordance with the frequency at which the frequency characteristic adjustment rate is the lowest (i.e., the frequency at which the vibration efficiency is the best).
[0122] First, the processor 101 determines a first clamp value and a second clamp value for the first vibration instruction data and the second vibration instruction data, respectively. The clamp value is determined as the clamp value based on the frequency characteristic adjustment rate when the frequency characteristic adjustment rate is the lowest among the frequencies from the frequency value of the vibration instruction data in the previous vibration instruction cycle to the frequency value of the vibration instruction data in the current vibration instruction cycle. Taking the third vibration instruction cycle as an example, for the first vibration instruction data, the first instruction frequency value at the time of the second vibration instruction cycle is 50 Hz, and the first instruction frequency value at the time of the third vibration instruction cycle is 150 Hz. Returning to FIG. 3, among the frequencies from 50 Hz to 150 Hz, the frequency with the lowest frequency characteristic adjustment rate is 100 Hz. Therefore, the processor 101 determines "0.5", which is the frequency characteristic adjustment rate of 100 Hz, as the first clamp value as the first clamp value.
[0123] For the second vibration instruction data, the second instruction frequency value at the time of the second vibration instruction cycle is 80 Hz, and the first instruction frequency value at the time of the third vibration instruction cycle is 200 Hz. Returning to FIG. 3, among the frequencies from 80 Hz to 200 Hz, the frequency with the lowest frequency characteristic adjustment rate is 100 Hz. Therefore, the processor 101 determines "0.5", which is the frequency characteristic adjustment rate of 100 Hz, as the second clamp value as the second clamp value.
[0124] Regarding the first vibration indication data, the processor 101 divides the first indicated amplitude value after frequency characteristic adjustment by the sum of the first indicated amplitude value after frequency characteristic adjustment and the second indicated amplitude value after frequency characteristic adjustment. The processor 101 multiplies the divided value by the above-mentioned first clamp value to determine the clamp value. For example, the first clamp value is calculated as the first clamp value × the first indicated amplitude value after frequency characteristic adjustment / (the first indicated amplitude value after frequency characteristic adjustment + the second indicated amplitude value after frequency characteristic adjustment), and becomes "0.29". If the first indicated amplitude value after frequency characteristic adjustment is greater than the determined clamp value, the processor 101 uses the clamp value as the first indicated amplitude value after clamp adjustment. That is, since the amplitude value "0.58" after frequency adjustment is greater than the determined first clamp value "0.29", the processor 101 determines "0.29" as the first indicated amplitude value after clamp adjustment.
[0125] Similarly, regarding the second vibration indication data, the processor 101 divides the second indicated amplitude value of frequency characteristic adjustment by the sum of the first indicated amplitude value of frequency characteristic adjustment and the second indicated amplitude value of frequency characteristic adjustment. The processor 101 multiplies the divided value by the second clamp value. Specifically, the clamp value determined by this calculation is 0.21, and the processor 101 determines this value as the clamp value. Since the amplitude value "0.42" after frequency adjustment is greater than the determined clamp value "0.21", the processor 101 determines "0.21" as the second indicated amplitude value after clamp adjustment.
[0126] As a result, the first vibration instruction data after the clamp adjustment process is converted into vibration instruction data 110 that indicates a first instruction amplitude value of "0.29" and a first instruction frequency value of "150", and the first vibration instruction data after the clamp adjustment process is converted into vibration instruction data 110 that indicates a first instruction amplitude value of "0.21" and a first instruction frequency value of "200". The processor 101 stores an instruction data set including the vibration instruction data 110 after the adjustment process in the vibration instruction data area 103B3 according to the system program 102P1, and then transmits the instruction data set to the game controller 200 in the stored order. The MCU 201 in the game controller 200 generates control data based on the received converted vibration instruction data 110, and drives the vibration motor 206 based on the control data.
[0127] [Procedure for Generating Vibration Instruction Data in Game Device] Hereinafter, the processing executed by the processor 101 of the game device 100 will be described using a flowchart. FIG. 5 is a flowchart showing the procedure for generating the vibration instruction data 114 including the normalized amplitude value executed in Embodiment 1. The processing of the flowchart shown in FIG. 5 is realized by the processor 101 executing the game program 102P2, and is started in response to the start of the execution of the game program 102P2.
[0128] The processor 101 acquires operation data (step S101). The processor 101 operates a game object based on the received operation data (step S102). A game object is an object that a user operates in the virtual space within the game, and can typically be a player character, a vehicle body in a car racing game, etc.
[0129] The processor 101 determines whether a shock event has occurred during the game based on the operation of the game object or by an in-game event unrelated to the operation of the game object (step S103). A shock event is an event that causes a vibration effect. For example, in the case of an adventure game, it includes the contact of a weapon such as a sword held by the player character with an enemy object, and in the case of a car racing game, it includes the collision of the vehicle operated by the user with another vehicle or the like. Various events are included depending on the content of the game.
[0130] If no shock event has occurred in the game (NO in step S103), the processor 101 returns the process to step S101. If a shock event has occurred in the game (YES in step S103), the processor 101 generates vibration instruction data 114 (typically, a time-series vibration instruction data group) and passes the generated vibration instruction data 114 to the system program 102P1 (step S104). At this time, the vibration instruction data (or the time-series vibration instruction data group) may be generated by reading the above-described vibration file 105.
[0131] After the processor 101 passes an instruction data set including vibration instruction data 114 to the system program 102P1, the process returns to step S101, and during the execution of the game, the processes of steps S101 to S104 are repeatedly executed. During the same period, if two impact events occur, the processor 101 passes an instruction data set including first vibration instruction data and second vibration instruction data to the system program 102P1 based on the two impact events. If one impact event occurs, the processor 101 passes an instruction data set including only the first vibration instruction data to the system program 102P1 based on the one impact event. In this case, the processor 101 may include second vibration instruction data specifying a second instruction amplitude value of "0" and a second instruction frequency value of "0" in the instruction data set. Note that based on one impact event, the first vibration instruction data and the second vibration instruction data may be generated. As described above, the game device 100 in the present embodiment generates the vibration instruction data 114 based on the occurrence of an impact event as the game progresses, and passes it to the system program 102P1. After executing step S104, the processor 101 executes other processes for the progress of the game.
[0132] FIG. 6 is a flowchart showing a procedure for converting vibration instruction data executed by the game device 100 in the first embodiment. The process of the flowchart shown in FIG. 6 is realized by the processor 101 executing the system program 102P1. In FIG. 6, the above-described adjustment process is executed.
[0133] The flowchart shown in FIG. 6 is executed based on the fact that an instruction data set is passed from the game program 102P2 to the system program 102P1. The processor 101 selects the first vibration instruction data and the second vibration instruction data passed from the game program 102P2 (step S105).
[0134] The processor 101 executes a total adjustment process on the first vibration instruction data and the second vibration instruction data (step S105A). Next, the processor 101 determines respective frequency characteristic adjustment rates according to the first instruction frequency value and the second instruction frequency value included in the first vibration instruction data and the second vibration instruction data after the total adjustment (step S106). Specifically, the processor 101 determines the frequency characteristic adjustment rate based on the data corresponding to the graph in FIG. 3. The processor 101 multiplies the frequency characteristic adjustment rate corresponding to the first instruction frequency value and the frequency characteristic adjustment rate corresponding to the second instruction frequency value by the first instruction amplitude value and the second instruction amplitude value after the total adjustment, respectively, and determines the first instruction amplitude value and the second instruction amplitude value after the frequency characteristic adjustment (step S107). That is, in step S106 and step S107, the above-described frequency characteristic adjustment process is executed.
[0135] Furthermore, the processor 101 executes a clamp adjustment process on each of the first instruction amplitude value and the second instruction amplitude value after the frequency characteristic adjustment (step S107A). The processor 101 writes an instruction data set including the first vibration instruction data and the second vibration instruction data after the clamp adjustment process to the vibration instruction data area 103B3 (step S108). The processor 101 determines whether all the instruction data sets passed from the game program 102P2 have been processed (step S109).
[0136] If the adjustment process has not been performed on all the vibration instruction data 114 (NO in step S109), the processor 101 returns the process to step S105. If the adjustment process for all the vibration instruction data 114 is completed (YES in step S109), the processor 101 ends the flowchart process. As a result, the vibration instruction data 110 after the adjustment process shown in the lower left part of FIG. 4 is written to the vibration instruction data area 103B3.
[0137] The processor 101 transmits the vibration instruction data 110 after the adjustment process stored in the vibration instruction data area 103B3 to the game controller 200 via the communication interface 104. The game controller 200 stores the received vibration instruction data 110 after the adjustment process in the vibration instruction data area 204B1 in the volatile memory 204.
[0138] [F. Control Data Generation Processing Procedure in Game Controller] Hereinafter, the processing executed by the MCU 201 of the game controller 200 will be described using a flowchart. FIG. 7 is a flowchart showing the processing procedure of control data generation executed by the game controller 200 in Embodiment 1. The control data is data generated by the processor 202 based on the first vibration instruction data and the second vibration instruction data after the adjustment process. The control data is typically data indicating a voltage value for driving the vibration motor 206, and is data (instantaneous value) indicating the voltage value at each instant of a waveform with a specified frequency and amplitude. Hereinafter, the control data is output at a predetermined interval, and this interval is referred to as a "control cycle".
[0139] In the present embodiment, since the amplifier 205 operates at 8 kHz, the control data is supplied to the vibration motor 206 every 0.125 ms, and the period thereof is 0.125 ms. The MCU 201 generates the number of control data obtained by dividing the vibration instruction cycle by the control cycle from one piece of vibration instruction data. In the present embodiment, since the vibration instruction cycle is a period of 5 ms and the control cycle is 0.125 ms, the processor 202 generates 40 pieces of control data from one piece of vibration instruction data. Based on the frequency value and amplitude value of the vibration instruction data 110 after the adjustment process, a reference waveform is determined for each control cycle (0.125 ms). The reference waveform is a waveform determined for each control cycle, and is a waveform for specifying the voltage value output as the control data. The processor 202 determines the voltage value output as the control data based on the reference waveform.
[0140] The processing of the flowchart shown in FIG. 7 is realized by the processor 202 executing the MCU program 203P. The processing of the flowchart shown in FIG. 7 is started, for example, based on the power supply to the game controller 200.
[0141] In the volatile memory 204, for each of the first vibration instruction data and the second vibration instruction data included in the instruction data set, there are a current amplitude data area 204V1, a current frequency data area 204V2, and a current phase data area 204V3, in which the current amplitude data, the current frequency data, and the current phase data are stored respectively. That is, the current amplitude data area 204V1 is configured to be able to store the first current amplitude data based on the first vibration instruction data and the second current amplitude data based on the second vibration instruction data. In the following, when explaining without distinguishing between the first current amplitude data and the second current amplitude data, it is simply referred to as "current amplitude data".
[0142] Also, the current frequency data area 204V2 is configured to be able to store the first current frequency data based on the first vibration instruction data and the second current frequency data based on the second vibration instruction data. In the following, when explaining without distinguishing between the first current frequency data and the second current frequency data, it is simply referred to as "current frequency data". On the other hand, since the current phase data stored in the current phase data area 204V3 is shared in the processing of both the first vibration instruction data and the second vibration instruction data, the current phase data area 204V3 is configured to store one current phase data. Note that the current phase data area 204V3 may be configured to be able to store the current phase data based on the first vibration instruction data and the second current phase data based on the second vibration instruction data. These data respectively indicate the current amplitude, the current frequency, and the current phase in the control data of the vibration motor 206 that vibrates based on the first vibration instruction data and the second vibration instruction data.
[0143] In step S201, the processor 202 copies the values of the current amplitude data and the current frequency data in each of the first vibration instruction data and the second vibration instruction data to a separate area of the volatile memory 204. Specifically, the previous amplitude data and the previous frequency data are stored in the previous amplitude data area 204V4 and the previous frequency data area 204V5, respectively, as the previous amplitude data and the previous frequency data (step S201).
[0144] The previous amplitude data area 204V4 is configured to be able to store the first previous amplitude data based on the first vibration instruction data and the second previous amplitude data based on the second vibration instruction data. Hereinafter, when the first previous amplitude data and the second previous amplitude data are not distinguished and described, they are simply referred to as "previous amplitude data". The previous frequency data area 204V5 is configured to be able to store the first previous frequency data based on the first vibration instruction data and the second previous frequency data based on the second vibration instruction data. Hereinafter, when the first previous frequency data and the second previous frequency data are not distinguished and described, they are simply referred to as "previous frequency data". Note that when the processor 202 executes the flowchart shown in FIG. 6 for the first time after the game controller 200 is activated, as an initialization process, "0V" is stored as the value of the current amplitude data and the value of the previous amplitude data, "0Hz" is stored as the value of the current frequency data and the value of the previous frequency data, and "0 degrees" is stored as the value of the current phase data.
[0145] The processor 202 determines whether an instruction data set exists in the vibration instruction data area 204B1 (step S202). If no instruction data set exists in the vibration instruction data area 204B1 (NO in step S202), in step S203, the processor 202 sets "0" for the amplitude value for each of the first vibration instruction data and the second vibration instruction data, and generates new first vibration instruction data and second vibration instruction data in which the values of the previous frequency data area 204V5 saved in step S201 are set as the frequency values of each of the first vibration instruction data and the second vibration instruction data, and stores them in the vibration instruction data area 204B1 (step S203).
[0146] As a result, after the vibration by the vibration instruction data 110 after the adjustment process instructed from the game program 102P2 ends, control data that gradually decreases to 0 is generated by the processes from S206 to S212 described later. This vibration is the end vibration described later. When the game program 102P2 executes the flow shown in FIG. 5 (specifically, in the process of S104), the processor 202 may generate data in which the vibration value of the last vibration instruction data is set to "0" and the frequency value is set to the same value as the previous frequency value. The previous frequency value means the frequency value used in the previous control or the frequency value indicated by the previous vibration instruction data. Similarly, the previous amplitude value means the amplitude value used in the previous control or the amplitude value indicated by the previous vibration instruction data.
[0147] Note that when returning to S202 again after the vibration instruction data stored in step S203 is processed in S204 to S212, there may be no instruction data set in the vibration instruction data area 204B1 again. In this case, vibration instruction data with an amplitude value of "0" is stored for each of the first vibration instruction data and the second vibration instruction data again in S203, and control data with a voltage value of zero is output in the subsequent process. Thus, in this embodiment, when the vibration by the vibration instruction data instructed by the game program 102P2 ends and there is no vibration instruction data in the vibration instruction data area 204B1, control data with a voltage value of zero continues to be output. For example, in the example of FIG. 9 described later, control data with a voltage value of zero is also output at times after timing T14. Thereby, the vibration can be surely converged. The means for performing the control after timing T14 in FIG. 9 like this may correspond to the "second vibration control means" in the present disclosure.
[0148] Next, the processor 202 acquires the first vibration instruction data in the instruction data set in the vibration instruction data area 204B1 and deletes that instruction data set from the vibration instruction data area 204B1 (step S204). At the head of the vibration instruction data area 204B1, the instruction data set stored in the vibration instruction data area 204B1 earliest is stored. In step S202, when there is an instruction data set in the vibration instruction data area 204B1 (YES in step S202), the processor 202 executes the process of step S204.
[0149] Hereinafter, in step S204, the first instruction amplitude value and the second instruction amplitude value included in the instruction data set acquired by the processor 202 are collectively referred to as the "instruction amplitude value" without distinction. Similarly, the first frequency value and the second frequency value included in the instruction data set acquired by the processor 202 in step S204 are collectively referred to as the "instruction frequency value" without distinction.
[0150] The processor 202 determines whether both the value of the first previous amplitude data and the value of the second previous amplitude data saved in step S201 are greater than 0 (step S205). If at least one of the value of the first previous amplitude data and the value of the second previous amplitude data is greater than 0 (YES in step S205), it can be determined that vibration has been continuing from before (not the start of vibration from a non-vibrating state), and the flow proceeds to the flow during vibration continuation after step S206. As will be described later, steps S207 to S210 are executed for each of the first vibration instruction data and the second vibration instruction data. The determination as to whether vibration has started from the state where vibration has been continuing in step S205 is also executed for each of the first vibration instruction data and the second vibration instruction data. In step S206, the processor 202 substitutes 1 into the count variable X (step S206). The count variable X is an area prepared in the volatile memory 204 and is a counter variable for repeating the process 40 times to generate 40 pieces of control data.
[0151] Hereinafter, using steps S201 to S210, the first current amplitude data and the second current amplitude data, the first current frequency data and the second current frequency data, and the current phase data are updated, and the generation of the first control data corresponding to the first vibration instruction data and the second control data corresponding to the second vibration instruction data will be described. That is, the processor 202 executes the processes of steps S201 to S210 shown in the figure for both the first vibration instruction data and the second vibration instruction data. In FIG. 7, for simplicity of explanation, it is illustrated that the processes for S201 to S210 of one vibration instruction data are performed. Steps S201 to S210 executed for the first vibration instruction data and steps S201 to S210 executed for the second vibration instruction data may be executed in parallel. As will be described in step S210A hereinafter, the sum of the first control data and the second control data is written as control data into the control data area 204B2.
[0152] Hereinafter, focusing only on the first vibration instruction data, steps S207 to S210 will be described. In step S207, the processor 202 substitutes a value into the first current amplitude data. In step S207, the processor 202 subtracts the value of the first previous amplitude data from the first instructed amplitude value. The processor 202 multiplies the result of the subtraction by a value obtained by dividing the numerical value stored in the count variable X by 40. The processor 202 stores, in the first current amplitude data, a value obtained by adding the first previous amplitude data to the result of the multiplication (step S207).
[0153] In step S208, the processor 202 substitutes a value into the first current frequency data. In step S208, the processor 202 subtracts the value of the first previous frequency data from the first instructed frequency. The processor 202 multiplies the result of the subtraction by a value obtained by dividing the numerical value stored in the count variable X by 40. The processor 202 stores, in the first current frequency data, a value obtained by adding the first previous frequency data to the result of the multiplication (step S208).
[0154] By the processes of steps S207 and S208, the first current amplitude data and the first current frequency data will store the amplitude value and frequency of the reference waveform that are referred to for generating the first control data. In step S209, the processor 202 substitutes a value into the current phase data. Specifically, the processor 202 sets the value of the current phase data to a phase advanced by 0.125 ms based on the value of the first current frequency data.
[0155] The processor 202 determines the amplitude and the current phase based on the value of the first current amplitude data, the value of the first current frequency data, and the value of the current phase data, and generates first control data corresponding to the calculated voltage value to be output to the amplifier 205 (step S210). More specifically, the processor 202 determines the reference waveform from the value of the first current amplitude data and the value of the first current frequency data, and generates, as the first control data, the voltage value at the phase indicated by the value of the first current phase data in the reference waveform. As described above, for the second vibration instruction data as well, the processor 202 executes steps S207 to S210 in the same manner as for the first vibration instruction data to generate the second control data. The processor 202 writes control data indicating the voltage value obtained by adding together the voltage value indicated by the first control data and the voltage value indicated by the second control data into the control data area 204B2 (step S210A). Thereby, the vibration motor 206 can vibrate based on both the first vibration instruction data and the second vibration instruction data. Also, in the vibration control system 10, when vibrating the vibration motor 206 based on the occurrence of one vibration event, the instructed amplitude value and the instructed frequency value of either the first vibration instruction data or the second vibration instruction data are 0.
[0156] The control data written into the control data area 204B2 is transmitted to the amplifier 205 by DMA, and the amplifier 205 amplifies the voltage to the voltage value corresponding to the control data written into the control data area 204B2, and applies the amplified voltage to the vibration motor 206.
[0157] The processor 202 assigns to the count variable X a value obtained by adding 1 to the current count variable X (step S211). The processor 202 determines whether the value of the count variable X exceeds 40 (step S212). If the value of the count variable X does not exceed 40 (NO in step S212), the processor 202 returns the process to step S207.
[0158] If the value of the count variable X exceeds 40 (YES in step S212), the processor 202 returns the process to step S201. The case where the value of the count variable X exceeds 40 means that the generation of 40 pieces of control data corresponding to the vibration instruction data acquired in step S204 has been completed. That is, it means that the processing of the acquired instruction data set has been completed.
[0159] As shown in steps S206 to S212, when the amplitude and frequency are instructed by the vibration instruction data, the vibration control system 10 of the present embodiment performs a process of gradually approaching the instructed amplitude and frequency from the immediately previous amplitude value and the immediately previous frequency. This is called interpolation processing. Note that this interpolation processing is not performed at the start of vibration. Also, through the processing of steps S206 to S212, 40 pieces of control data are generated for each 0.125 ms for one piece of vibration instruction data.
[0160] Return to step S205. When the value of the previous amplitude data is 0 (NO in step S205), the processor 202 determines that it is the start of vibration and executes the start process (step S214). The case where the value of the previous amplitude data is 0 means starting the operation from the state where the vibration motor 206 is stopped. Note that in step S205, it may be determined that the previous amplitude data is approximately zero. Also, in step S205, instead of determining that the previous amplitude data is greater than 0, it may be determined that the previous control data is greater than 0. In this case, when the previous amplitude data is 0, or when the previous amplitude data is not 0 but the control data is 0 due to the phase, the start process is executed. Even in this case, it may be determined that it is approximately zero.
[0161] Figure 8 is a flowchart showing the processing procedure of the start process in step S214. The processing of the flowchart shown in Figure 8 is started when the processor 202 executes step S214 in Figure 7. That is, in step S205, when both the value of the first previous amplitude data and the value of the second previous amplitude data stored in step S201 are 0, the flowchart of Figure 8 is executed and processed for each of the first vibration instruction data and the second vibration instruction data. Hereinafter, the first vibration instruction data will be described, but the same applies to the second vibration instruction data.
[0162] The processor 202 substitutes 1 for the count variable X (step S2151). The processor 202 substitutes the first instructed amplitude value for the first current amplitude data (step S2152). Thereby, at the start of vibration, the value of the amplitude can quickly become the instructed value, enhancing the effect of impact vibration. Also, the processor 202 substitutes the instructed frequency for the first current frequency data (step S2153). The processor 202 substitutes for the current phase data a phase value obtained by advancing the phase by 0.125 ms from the value stored in the current phase data based on the frequency stored in the first current frequency data (step S2154).
[0163] Based on the first current amplitude data and the current phase data, the processor 202 calculates the voltage value to be output to the amplifier 205, and writes the first control data corresponding to the calculated voltage value into the control data area 204B2 (step S2115). The processor 202 substitutes the value obtained by adding 1 to the current count variable X for the count variable X (step S2156). Then, the processor 202 determines whether the value of the count variable X exceeds 40 (step S2157).
[0164] When the value of the count variable X does not exceed 40 (NO in step S2157), the processor 202 returns the process to step S2152. When the value of the count variable X exceeds 40 (YES in step S2157), the processor 202 ends the process of the flowchart in FIG. 8. Then, the processor 202 executes the process of step S213 in FIG. 7.
[0165] As described above, the vibration control system 10 in the present embodiment can finely control the vibration waveform by determining the control data corresponding to the voltage value for each control cycle. Further, even when the vibration control system 10 processes both the first vibration instruction data and the second vibration instruction data by the total adjustment process, the vibration control system 10 can generate appropriate control data by apportioning the first instruction amplitude value and the second instruction amplitude value. Furthermore, the vibration control system 10 can operate the vibration motor 206 so that the displacement of the vibrator does not exceed the limit value by the frequency characteristic adjustment process. Also, the vibration control system 10 can generate appropriate control data even when gradually changing the frequency by the clamp adjustment process.
[0166] When changing the amplitude value, noise may occur if the voltage value does not change from 0V. Therefore, the vibration control system 10 in Embodiment 1 gradually changes the amplitude value in units of the control cycle (0.125 ms) by executing steps S207 to S210. On the other hand, in order to prevent the generation of noise, it is possible to wait for the change of the amplitude value until the voltage value becomes 0V, but if so, the timing of the change of the amplitude value will be delayed. The vibration control system 10 of the present embodiment usually suppresses the generation of noise by gradually changing the amplitude value or the frequency value within the vibration instruction cycle (5 ms), and when the previous voltage value is 0V, controls it to be the instructed amplitude value. Therefore, it is possible to generate a good rising vibration while suppressing the generation of noise.
[0167] [Example of vibration waveform generated based on vibration instruction data] FIG. 9 is an example of the waveform of the first control data generated based on the first impact event. The time-series vibration instruction data group based on the first impact event is data of "(1, 100), (1, 100)". Hereinafter, an example in which the second vibration instruction data specifying the second instructed amplitude value "0" and the second instructed frequency value "0" and the first vibration instruction data based on the first vibration event are processed based on the occurrence of only the first vibration event will be described. By executing the adjustment process described above, the time-series vibration instruction data group based on the first impact event is converted into data of "(0.5, 100), (0.5, 100)". The vibration waveform generated based on the first impact event is output between timings T11 to T13. The period from timing T11 to timing T13 is a period of 10 ms. Between timings T11 to T13, by executing the flowcharts of FIGS. 7 and 8, a vibration waveform corresponding to the amplitude value "0.5V" of the frequency value "100 Hz" is generated. That is, the frequency of the vibration waveform between timings T11 to T13 is "100 Hz", and the maximum amplitude value is "0.5V".
[0168] The waveform generated between timings T11 and T12 is generated by the processor 202 processing the first vibration instruction data "(0.5, 100)" at the head of the time-series vibration instruction data group based on the first shock event. The waveform generated between timings T12 and T13 is generated by the processor 202 processing the second first vibration instruction data "(0.5, 100)" included in the time-series vibration instruction data group based on the first shock event.
[0169] The waveform of the control data generated between timings T13 and T14 is generated by executing steps S206 to S212 after the first instruction amplitude is set to 0 in S203 above when there is no vibration instruction data to be processed. Below, the waveform occurring between timings T13 and T14 will be described with reference to FIGS. 10 and 11. The vibration occurring after the processing of the vibration instruction data 110 after adjustment received from the game device 100 is completed is referred to as "end vibration". The control data occurring between timings T13 and T14 is an example of control data for generating end vibration. Also, the control data transmitted to the amplifier 205 to generate end vibration is referred to as "end control data". In the present embodiment, the processor 202 generates end control data so that the vibration motor 206 performs end vibration immediately after the vibration control based on the vibration instruction data 110 after adjustment received from the game device 100 is completed. The processor 202 may generate end vibration after the vibration based on the vibration instruction data generated by the occurrence of a normal vibration event rather than a shock vibration event.
[0170] Returning to FIG. 7, when the processing of the last vibration instruction data 110 after adjustment in the time-series vibration instruction data group based on the first shock event is completed and the count variable X exceeds 40 in step S212, the processor 202 saves the current amplitude data ("0.5") as the previous amplitude data and the current frequency data ("100 Hz") as the previous frequency data in step S201.
[0171] Therefore, when all the first vibration instruction data stored in the vibration instruction data area 204B1 is processed and the first vibration instruction data no longer exists (NO in step S202), the processor 202 sets "0" as the instruction amplitude in step S203, sets the same frequency "100 Hz" as the value of the first previous frequency data as the first instruction frequency, and stores it in the first vibration instruction data area. The processor 202 substitutes "1" into the count variable (step S206).
[0172] After that, since the first previous amplitude data is "0.5" and the first instruction amplitude value is "0", the processor 202 executes the process of step S207, and a value obtained by multiplying 0.5 by 39 / 40 is substituted into the first current amplitude data. That is, 0.4875 is substituted into the first current amplitude data. Also, since the first previous frequency data is "100 Hz" and the first instruction frequency is also "100 Hz", the processor 202 substitutes "100 Hz" into the first current frequency data by executing the process of step S208. The processor 202 advances the current phase data by an amount corresponding to 0.125 ms.
[0173] FIG. 10 is a diagram showing reference waveforms during timings T13 to T14. In FIG. 10, 40 reference waveforms Rw1, Rw2, Rw3,... are shown by broken lines. Hereinafter, the 40 reference waveforms Rw1, Rw2, Rw3,... are collectively referred to as "reference waveform Rw". The processor 202 determines the reference waveform Rw1 from the first current amplitude data "0.4875" and the first current frequency "100 Hz". That is, the reference waveform Rw1 is a waveform having a frequency of 100 Hz and a maximum amplitude of 0.4875 (0.5×(39 / 40)).
[0174] In the process of step S210, the processor 202 acquires the voltage value D1 when the phase has advanced by 0.125 ms from the timing T13 in the reference waveform Rw1 as the first control data and writes it into the control data area 204B2. The voltage value D1 is shown in FIG. 10. The processor 202 increments the count variable X, and the value assigned to the count variable X becomes "2".
[0175] The procedure for acquiring the voltage value at the timing when the phase has advanced by an additional 0.125 ms (the timing when the phase has advanced by 0.250 ms from the timing T13) will be described. Since the first previous amplitude data is "0.5" and the first indicated amplitude value is "0", the processor 202 executes the process of step S207, and a value obtained by multiplying 0.5 by 38 / 40 is assigned to the first current amplitude data. That is, 0.4750 is assigned to the first current amplitude data. Also, since the first previous frequency is "100 Hz" and the first indicated frequency is also "100 Hz", the processor 202 executes the process of step S208 and assigns "100 Hz" to the first current frequency data. The processor 202 advances the current phase data by 0.125 ms.
[0176] The processor 202 determines the reference waveform Rw2 from the first current amplitude data "0.4750" and the first current frequency "100 Hz". The reference waveform Rw2 is a waveform with a frequency of 100 Hz and a maximum amplitude of 0.4750 (0.5×(38 / 40)).
[0177] In the process of step S210, the processor 202 acquires the voltage value D2 when the phase has advanced by 0.250 ms from the timing T13 in the reference waveform Rw2 as the first control data and writes it into the control data area 204B2. The voltage value D2 is shown in FIG. 10. Further, the processor 202 increments the count variable X, and the value assigned to the count variable X becomes "3".
[0178] In the same procedure, the processor 202 further obtains the voltage value D3 when the phase has advanced by 0.125 ms, and writes the first control data corresponding to the voltage value D3 into the control data area 204B2. The processor 202 repeats the output of the first control data 40 times during the period from timing T13 to T14. FIG. 11 is a diagram showing the waveform of the oscillation at the end output as a result of the processing in units of control cycles corresponding to the period from timing T13 to T14. At each of a plurality of time points during the period from timing T13 to T14, the processor 202 reduces the maximum amplitude value of the reference waveform Rw and advances the phase as time elapses.
[0179] As described above, in the vibration control system 10 according to the present embodiment, by executing the processes of the flowcharts shown in FIGS. 7 and 8, based on the fact that the vibration control based on the vibration instruction data 110 after the adjustment process received from the game device 100 has ended, control data for stopping the vibration of the vibration motor 206 is output to the vibration motor 206. In the present embodiment, the period of the oscillation at the end is a period of 5 ms, which is the same period as the vibration instruction cycle. Since the vibration stops in the same period as the vibration instruction cycle, the decay of the impact vibration can be improved.
[0180] As shown in FIG. 10, during the period from timing T13 to T14 after the vibration control based on the vibration instruction data 110 after the adjustment process has ended, the processor 202 generates control data so that the amplitude value of the reference waveform gradually decreases from the amplitude value "0.5" included in the immediately preceding vibration instruction data (0.5, 100) processed. Hereinafter, in the vibration instruction cycle (a period of 5 ms), the processing in units of 40 control cycles when the reference waveform Rw gradually changes is referred to as "interpolation processing". In the present embodiment, during the period from timing T13 to T14, the frequency of the reference waveform Rw is always the frequency "100 Hz" and does not change. In the example of FIG. 9, the period from timing T13 to T14 may correspond to the "first period" in the present disclosure.
[0181] Also, during the periods of timings T11 to T13, by executing the processes of the flowchart shown in FIG. 8, the reference waveform Rw during the periods of timings T11 to T13 always has an amplitude value of "0.5" and a frequency of "100 Hz". Therefore, a sine wave as shown in FIG. 9 is generated during the periods of timings T11 to T13.
[0182] In the vibration control according to the first impact event, since each vibration instruction data included in the time-series vibration instruction data group is the same, the effect of the interpolation process does not appear. However, the amplitude value and frequency of each vibration instruction data included in the time-series vibration instruction data group may vary. In this case, even while the vibration continues, the interpolation process makes the changes in the amplitude value and frequency value smooth.
[0183] FIG. 12 is an example of the waveform of the control data generated based on the second impact event. As shown in FIG. 2, the time-series vibration instruction data group based on the second impact event is data of "(1, 50), (1, 50), (1, 50), (1, 50)". Hereinafter, an example in which the second vibration instruction data designating the second instruction amplitude value "0" and the second instruction frequency value "0" and the first vibration instruction data based on the second vibration event are processed based only on the occurrence of the second vibration event will be described. By executing the above-described adjustment process, the time-series vibration instruction data group based on the second impact event is converted into data of "(1, 50), (1, 50), (1, 50), (1, 50)".
[0184] The vibration waveform generated based on the second impact event is output between timings T21 and T25. The period from timing T21 to timing T25 is a period of 20 ms. During the period between timings T21 and T23, by executing the flowcharts of FIGS. 7 and 8, since the reference waveform Rw always has a frequency of "50 Hz" and a maximum amplitude value of "1", a waveform that is a sine wave is generated.
[0185] The waveform corresponding to the end vibration occurring between timings T25 and T26 is a reference waveform Rw whose amplitude gradually decreases as the phase advances, as described with reference to FIGS. 10 and 11, and is generated based on the reference waveform Rw. Note that the period from timing T25 to T26 in the example of FIG. 12 may correspond to the "first period" in the present disclosure.
[0186] FIG. 13 is an example of a waveform of control data generated based on a third shock event. As shown in FIG. 2, the time-series vibration instruction data group based on the third shock event is data of "(1, 50), (1, 50), (1, 50), (1, 50), (1, 50), (1, 50), (1, 50), (1, 50)". Hereinafter, an example in which second vibration instruction data specifying a second instruction amplitude value "0" and a second instruction frequency value "0" and first vibration instruction data based on the third vibration event are processed based only on the occurrence of the third vibration event will be described. By executing the adjustment process described above, the time-series vibration instruction data group based on the third shock event is converted into data of "(1, 50), (1, 50), (1, 50), (1, 50)".
[0187] The waveform generated based on the third shock event is output between timings T31 and T39. The period from timing T31 to timing T39 is a period of 40 ms. Between timings T31 and T39, by executing the flowcharts of FIGS. 7 and 8, a waveform that is always a sine wave with a frequency of "50 Hz" and a maximum amplitude value of "1" is generated as a reference waveform.
[0188] The waveform corresponding to the end vibration occurring between timings T39 and T310 is a reference waveform whose maximum amplitude gradually decreases as the phase advances, as described with reference to FIGS. 10 and 11, and is generated based on the reference waveform. Note that the period from timing T39 to T310 in the example of FIG. 13 may correspond to the "first period" in the present disclosure.
[0189] As described with reference to FIGS. 9 to 13, in the vibration control system 10 of the present embodiment, control is performed such that the reference waveform Rw gradually changes by interpolation processing during and at the end of vibration. On the other hand, in the vibration control system 10 of the present embodiment, at the start of vibration, control for gradually changing the reference waveform Rw is not performed. As a result, at the start, it is possible to generate a steep vibration waveform and give the user vibrations corresponding to collisions, explosions, etc.
[0190] Further, in the vibration control system 10 of the present embodiment, when the vibration motor 206 transitions from the operating state to the stopped state, by generating end vibration, it is possible to suppress noise generation such as the occurrence of unintended vibrations in terms of design, as compared with stopping by inertia without giving control to the vibration motor 206.
[0191] [H. Modification Example] Hereinafter, other forms that are partially modified from the above-described embodiment will be described.
[0192] In the above example, an example in which the vibration control system 10 in the present embodiment is applied to a game system has been described, but the applicable system is not limited to the game system. For example, the vibration control system 10 in the present embodiment may be used in practical applications other than so-called video games, children's toys, or training systems for virtually driving a vehicle using VR or the like.
[0193] In the above example, a configuration example in which the game system applied to the vibration control system 10 includes one game controller 200 is shown, but the game system applied to the vibration control system 10 may include a plurality of game controllers 200.
[0194] In the above example, it has been described that the display device connected to the game device 100 is a display such as an organic EL or a head-mounted display, but for example, a display device using a hologram may be used.
[0195] In the above example, an example was described in which the processing of the flowchart corresponding to FIGS. 5 and 6 is executed in the game device 100, and the processing of the flowchart corresponding to FIGS. 7 and 8 is executed in the game controller 200. However, all the processing included in the flowcharts of FIGS. 5 to 8 may be executed by either the game device 100 or the game controller 200. Furthermore, the processing of the flowchart executed by the game device 100 is not limited to the flowcharts of FIGS. 5 and 8, and may be only the processing of the flowchart of FIG. 5, or may be the processing of the flowcharts of FIGS. 5, 6, and 7.
[0196] Also, the processors included in the game device 100 and the game controller 200 may be configured with one chip or with a plurality of chips.
[0197] In the above example, storing a plurality of data in the same row within the same table was referred to as "associating". However, the term "associating" is not limited to this, and includes cases where a plurality of data are indirectly associated between a plurality of tables.
[0198] In the above example, for the sake of simplicity of explanation, an example in which all the vibration instruction data included in the time-series vibration instruction data group have the same content was described. However, the plurality of vibration instruction data included in the time-series vibration instruction data group may each have different content. For example, the vibration instruction data 114 may include data such as "(1,100), (1,100), (0.7,50), (0.5,50)".
[0199] In the above example, an example was described in which the waveform of the control data corresponding to the end vibration has the same frequency as the frequency immediately executed. However, the vibration waveform corresponding to the end vibration may have a frequency different from the frequency immediately executed. For example, the frequency of the waveform corresponding to the end vibration may be predefined as a frequency such as "40 Hz", "70 Hz", or "200 Hz". In this case, in the interpolation process, the processor 202 gradually changes not only the amplitude value of the reference waveform Rw but also the frequency.
[0200] In the above example, an example where the waveform of the control data is a sine wave has been described. However, waveforms of other shapes such as rectangular waves may also be used. Furthermore, the vibration instruction cycle may be a period equal to or shorter than the length of one wavelength of the lower limit frequency of the vibration motor 206 (in the example of Embodiment 1, 25 ms), and is not limited to a period of 5 ms. The vibration control system 10 can perform fine control by setting the vibration instruction cycle shorter.
[0201] In the above example, one piece of vibration instruction data was data for outputting power over a period equal to or shorter than one wavelength of the vibration waveform. However, the period during which control data is output by one piece of vibration instruction data may be a period equal to or shorter than two wavelengths, or equal to or shorter than three wavelengths. Furthermore, in the above example, the game device 100 and the game controller 200 are provided as a separate game system. However, the game device 100 and the game controller 200 may be integrally provided.
[0202] In the above example, an example where end vibration is generated by executing the processing of the flowchart in FIG. 7 has been described. However, the processor 202 may separately determine that all the processing of the vibration instruction data 110 after adjustment received from the game device 100 has been completed. When it is determined that it is the generation timing of the end vibration, the processor 202 generates the end vibration by executing another flowchart different from FIG. 7.
[0203] In the above example, the game program 102P2 is configured to instruct data normalized for the amplitude data. However, the amplitude data indicating the control voltage value may be directly specified. Also, in the example of the frequency characteristic data, the horizontal axis is the frequency and the vertical axis is the frequency characteristic adjustment rate. However, the vertical axis of the frequency characteristic data may be the upper limit (V) of the input voltage itself at each frequency.
[0204] In the example of FIG. 9, the period during which vibration continues when there is one impact event (the period from timing T11 to T13) was a period of 10 ms. However, the period during which vibration continues when there is one impact event may be any other period as long as it is 50 ms or less. Incidentally, for the sake of clarity, it should be noted that the present disclosure includes not only a method of directly specifying time but also a method of substantially specifying a period of 50 ms or less by specifying the number of waves or the number of vibration instruction data.
[0205] Further, the vibration instruction data may specify data on the amount of change in amplitude and the amount of change in frequency. In that case, processing for calculating the current amplitude and frequency using the values of the immediately preceding amplitude and the immediately preceding frequency is performed by the processor. This processing may be performed by the processor of the game machine or may be performed by the processor of the game controller.
[0206] Incidentally, in the example of FIG. 9 described above, an example was described in which after generating the end vibration at timing T13 to T14, control data with a voltage value of zero is continuously output after timing T14. However, the output of the control data with a voltage value of zero may be started from timing T13 without generating the end vibration. FIG. 14 is a diagram showing a waveform of a modified example. That is, in the modified example, immediately after the vibration according to the vibration instruction data instructed by the game program 102P2 ends (after the timing T13 in FIG. 13), control data with a voltage value of zero is output. Further, after the vibration according to the vibration instruction data instructed by the game program 102P2 ends (for example, after the timing T13 in FIG. 9), control data having a phase opposite to the immediately preceding phase may be output. These examples may correspond to the "second vibration control means" of the present disclosure. Thus, in the first embodiment, by performing the end control, when no vibration instruction data is input from the game program 102P2 and no control is performed on the vibration motor 206, the vibration motor 206 can be stopped earlier. In the first embodiment, the vibration control system 10 stops the vibration motor 206 within the vibration instruction cycle.
[0207] In the above example, an example in which the adjustment processes are executed in the order of the total adjustment process, the frequency characteristic adjustment process, and the clamp adjustment process by the processor 101 has been described. However, the order in which the adjustment processes are executed is not limited to this. For example, the processor 101 may execute the adjustment processes in the order of the clamp adjustment process, the total adjustment process, and the frequency characteristic adjustment process, or may execute the adjustment processes in another order. Note that in the first embodiment, by executing the total adjustment process prior to the frequency characteristic adjustment process and the clamp adjustment process, it becomes possible to perform control that emphasizes the frequency characteristics of the vibration motor 206.
[0208] A plurality of types of game controllers 200 may be applicable to the vibration control system 10. The above-described frequency characteristic data may differ depending on the type of the game controller 200. Also, the plurality of types of game controllers 200 may have different types of amplifiers 205 and vibration motors 206. [Second Embodiment] In the first embodiment, the case where the game program 102P2 is an adventure game has been described. However, the content of the game program 102P2 may be other content. In the second embodiment, the case where the game program 102P2 is a music performance game will be described. Further, in the second embodiment, the vibration instruction data area 103B3 is configured to be able to store one vibration instruction data corresponding to one timing. That is, in the second embodiment, an example in which only the first vibration instruction data is stored in the instruction data set and the second vibration instruction data is not stored will be described. For this reason, in the adjustment process in the second embodiment, the total adjustment process of proportionally dividing the first instruction amplitude value and the second instruction amplitude value is not executed, and only the frequency characteristic adjustment process and the clamp adjustment process are executed. The clamp adjustment process in the second embodiment is different from the clamp adjustment process in the first embodiment, and does not execute the proportional division process between the first instruction amplitude after the frequency characteristic adjustment and the second instruction amplitude after the frequency characteristic adjustment, and simply determines whether or not the first instruction amplitude after the frequency characteristic adjustment exceeds the first clamp value.
[0209] In the example of Embodiment 2, the game program 102P2 is a music performance game. In the music performance game, the game controller 200 is treated as a pseudo predetermined musical instrument. The predetermined musical instrument includes various musical instruments such as, for example, drums, cymbals, triangles, violins, trumpets, pianos, or other percussion instruments, stringed instruments, woodwind instruments, brass instruments, lead instruments, etc. In the example of Embodiment 2, based on the input from the user, the musical instrument in the game is played, and vibrations are generated according to the playing of the musical instrument.
[0210] FIG. 15 is a flowchart showing a procedure for generating vibration instruction data 114 including a normalized amplitude value in the game apparatus 100 according to Embodiment 2. The process of the flowchart shown in FIG. 15 is realized by the processor 101 executing the game program 102P2.
[0211] The execution of the flowchart shown in FIG. 15 is started when the execution of the game program 102P2 is started by the processor 101. The processor 101 acquires the type of musical instrument selected by the user (step S301).
[0212] The processor 101 acquires operation data (step S302). The processor 101 determines whether or not a shock event has occurred based on the operation data (step S303). In Embodiment 2, the occurrence condition of the shock event is that the operation data associated in advance for each musical instrument selected in step S301 is acquired in step S302.
[0213] For example, the occurrence condition of the shock event when a drum is selected is that the rod-shaped game controller 200 is swung downward in a predetermined direction at a predetermined range of angular velocity. As another example, the occurrence condition of the shock event when a piano is selected is that a button on the surface of the game controller 200 is pressed. Thus, in the musical instrument performance game of Embodiment 2, the game controller 200 can be regarded as a drumstick to allow the user to perform a pseudo performance.
[0214] When no impact event has occurred (NO in step S303), the processor 101 returns the process to step S301. When an impact event has occurred (YES in step S303), the processor 101 outputs sound according to the type of musical instrument (step S304). When the drum is selected, the sound when the drum is struck with a drumstick is output.
[0215] The processor 101 executes the game program 102P2 to generate vibration instruction data 114 (or a time-series vibration instruction data group), and passes the generated vibration instruction data 114 to the system program 102P1 (step S305).
[0216] FIG. 16 is a diagram for explaining an example of generating vibration instruction data 110 after adjustment processing based on the vibration file 105 in the second embodiment.
[0217] In the vibration control system 10 in the second embodiment, the vibration file 105 in the game program 102P2 that can execute a music performance game by the game device 100 is referred to, and first, vibration instruction data 114 is generated. The vibration file 105 is shown as a table in the upper left part of FIG. 16. In the vibration file 105 in the example of FIG. 16, each of the data representing the event name, the type of musical instrument, and the vibration content is associated with each other. The data representing the type of musical instrument includes data indicating a plurality of types of musical instruments that can be selected by the user described above. The data representing the vibration content includes a frequency, a number of wavelengths, and an amplitude, similar to the first embodiment.
[0218] In the event name "first impact event" in the second embodiment, the musical instrument type "drum", the frequency "50", the number of wavelengths "2", and the amplitude "1" are associated. That is, the first impact event in the second embodiment is an event in which a voltage corresponding to the maximum output voltage allowed for the output of the amplifier 205 is output to the vibration motor 206 for two wavelengths at a wavelength of 50 Hz.
[0219] In Embodiment 2, the event name "Second Impact Event" is associated with the musical instrument type "cymbal", the frequency "100", the number of wavelengths "1", and the amplitude "0.8". That is, the Second Impact Event is an event in which a voltage corresponding to 80% of the maximum output voltage allowed for the output of the amplifier 205 is output to the vibration motor 206 for one wavelength at a wavelength of 100 Hz.
[0220] Also in Embodiment 2, the processor 101 generates vibration instruction data 114 including the normalized amplitude value. In Embodiment 2, the time-series vibration instruction data group generated based on the occurrence of the First Impact Event includes eight vibration instruction data 114, namely, "(1, 50), (1, 50), (1, 50), (1, 50), (1, 50), (1, 50), (1, 50), (1, 50)". Further, in Embodiment 2, the time-series vibration instruction data group generated based on the occurrence of the Second Impact Event includes two vibration instruction data 114, namely, "(0.8, 100), (0.8, 100)".
[0221] Processor 101 uses the data corresponding to the graph in FIG. 3 to obtain the frequency characteristic adjustment law at each frequency and executes the frequency characteristic adjustment process. Also, processor 101 executes a clamp adjustment process on the indicated vibration value to generate the converted vibration instruction data 114 shown in FIG. 16. Regarding the converted vibration instruction data 110 corresponding to the first shock event, processor 101 refers to the data corresponding to the graph in FIG. 3 and identifies that when the vibration motor 206 operates at a frequency of 50 Hz, the frequency characteristic adjustment rate of the vibration motor 206 is "1". Processor 101 multiplies the normalized amplitude parameter "1" in the vibration instruction data 114 corresponding to the first shock event by the frequency characteristic adjustment rate "1" to calculate the amplitude value "1". When the vibration motor 206 is not vibrating when the first shock event occurs, processor 101 obtains "1" as the first clamp value for each of the time-series vibration instruction data groups generated based on the occurrence of the first shock event. Since each of the time-series vibration instruction data groups does not exceed the first clamp value, processor 202 ends the clamp adjustment process without changing the amplitude value "1" after the frequency characteristic adjustment.
[0222] Regarding the vibration instruction data 110 after the frequency characteristic adjustment process and the clamp adjustment process corresponding to the second shock event, processor 101 refers to the data corresponding to the graph in FIG. 3 and identifies that when the vibration motor 206 operates at a frequency of 100 Hz, the frequency characteristic adjustment rate is "0.5". Processor 101 multiplies the normalized amplitude value "0.8" in the vibration instruction data 114 corresponding to the second shock event by the frequency characteristic adjustment rate "0.5" to calculate the amplitude value "0.4". When the vibration motor 206 is not vibrating when the second shock event occurs, processor 101 obtains "0.5" as the first clamp value for each of the time-series vibration instruction data groups generated based on the occurrence of the second shock event. Since each of the time-series vibration instruction data groups does not exceed the first clamp value, processor 101 ends the clamp adjustment process without changing the amplitude value "0.4" after the frequency characteristic adjustment.
[0223] As a result, in Embodiment 2, the processor 101 outputs data “(1,100), (1,100), (1,100), (1,100), (1,100), (1,100), (1,100), (1,100)” to the game controller 200 as the vibration instruction data 110 after the adjustment process corresponding to the first impact event. Further, the processor 101 outputs data “(0.4,50), (0.4,50)” to the game controller 200 as the vibration instruction data 110 after the adjustment process corresponding to the second impact event. Thus, in Embodiment 2, in the music performance game, it is possible to give the user vibrations according to the selected musical instrument.
[0224] Further, in Embodiment 2, an amplitude value “0.8” is associated with the cymbal. Thus, in the vibration control system 10 of the present embodiment, the amplitude value is not limited to “1” as long as it is within the range of 0 to 1. In Embodiment 2, the amplitude value “0.8” associated with the cymbal may correspond to the “amplitude value corresponding to the maximum output voltage” that the amplifier is allowed to output in the present disclosure.
[0225] [Embodiment 3] In Embodiment 2, an example in which the game program 102P2 is a music performance game has been described, but the content of the game program 102P2 may be other content. In Embodiment 3, a case where the game program 102P2 is a rhythm game will be described.
[0226] In Embodiments 1 and 2, examples of generating vibrations in response to user input have been described. However, the vibration control system 10 may generate vibrations at a predetermined timing instead of user input. In the example of Embodiment 3, the processor 101 generates the vibration instruction data 110 after the adjustment process by executing the flowchart in FIG. 17 and the flowchart in FIG. 18 in parallel.
[0227] The rhythm game of Embodiment 3 is a game that outputs music and tests the user's sense of rhythm by causing the user to perform a predetermined operation at a predetermined timing in the music. The predetermined timing is the timing at which the user should perform the operation. In the game of Embodiment 3, vibrations serving as a rhythm reference are output at regular time intervals. This is referred to as "beat vibration". In Embodiment 3, the operation that the user should perform at the predetermined timing is an operation of swinging the rod-shaped game controller 200 at a predetermined angular velocity or higher. Hereinafter, the operation of swinging the rod-shaped game controller 200 at a predetermined angular velocity or higher is referred to as a "swinging operation". In the rhythm game of Embodiment 3, points are added when the swinging operation is performed at the predetermined timing, and the final score is displayed to the user when the music ends. By outputting the beat vibration at regular intervals, it becomes easier for the user to keep timing. The operation timing of the user may be made to coincide with the beat timing.
[0228] FIG. 17 is a flowchart showing the execution procedure of the rhythm game in Embodiment 3. The processing of the flowchart shown in FIG. 17 is realized by the processor 101 executing the game program 102P2.
[0229] The processor 101 starts music playback (step S401). The music in step S401 can be, for example, classical music, the BGM of the game, or the like. The processor 101 acquires operation data (step S402). The processor 101 determines whether a swinging operation has occurred (step S403).
[0230] If the swinging operation has not occurred (NO in step S403), the processor 101 executes other processing for advancing the rhythm game and returns the processing to step S401. If the swinging operation has occurred (YES in step S403), the processor 101 determines whether the swinging operation in step S403 was performed at the correct timing (step S404).
[0231] If the shaking operation is not performed at the correct timing (NO in step S404), the processor 101 executes other processes for advancing the rhythm game and returns the process to step S401. If the shaking operation is performed at the correct timing (YES in step S404), the processor 101 performs a point addition process in the rhythm game (step S405). After the completion of the point addition process, the processor 101 executes other processes for advancing the rhythm game and returns the process to step S401.
[0232] FIG. 18 is a flowchart showing a procedure of a generation process of vibration instruction data 114 including a normalized amplitude value in the game device 100 according to the third embodiment. The processor 101 determines whether it is the beat timing (step S501). The beat timing is a fixed time interval. If it is not the beat timing (NO in step S501), the processor 101 repeats the process of step S501.
[0233] If it is the beat timing (YES in step S501), the processor 101 generates the vibration instruction data 114 and passes the generated vibration instruction data 114 (or the time-series vibration instruction data group) to the system program 102P1 (step S502).
[0234] As described above, in the third embodiment, instead of generating vibration based on the user's input, vibration is generated at a predetermined timing in the music based on the output of the music. Thereby, in the rhythm game of the third embodiment, the timing at which the shaking operation should be performed can be recognized by the user using vibration. Further, as described in the first embodiment, in the vibration control system 10, a strong vibration can be given by not executing the interpolation process at the start. Thereby, in the third embodiment, the user can also recognize the vibration during the period in which the user is performing the shaking operation.
[0235] [Fourth Embodiment] In Embodiment 1, an example in which the frequency characteristic adjustment process corresponding to steps S106 and S107 in FIG. 6 is executed by the processor 101 on the game device 100 side was described. However, the frequency characteristic adjustment process may be executed by the processor 202 on the game controller 200 side. Note that in Embodiment 4, the description of the configuration overlapping with that in Embodiment 1 will not be repeated.
[0236] In Embodiment 4, the processor 202 is configured to be able to access the frequency characteristic data shown in FIG. 3. For example, the frequency characteristic data shown in FIG. 3 may be stored in the non-volatile memory 203 of the game controller 200. FIG. 19 is a flowchart showing a conversion procedure of vibration instruction data executed by the game device 100 in Embodiment 4. In Embodiment 4, the processor 101 does not execute the processes of steps S106, S107, and S107A (clamp adjustment process) in Embodiment 1. That is, in Embodiment 4, only the total adjustment process is executed in the game device 100.
[0237] FIG. 20 is a flowchart showing a control data generation process procedure executed by the game controller 200 in Embodiment 4. In Embodiment 4, after updating the current phase data in step S209, the processor 202 executes a frequency characteristic adjustment process (step S209B). In step S209B, the processor 202 specifies the frequency characteristic adjustment rate corresponding to the current frequency data updated in step S208 with reference to the frequency characteristic data, and multiplies the current amplitude data in step S207 by the specified frequency characteristic adjustment rate to adjust the amplitude value of the current amplitude data. That is, in Embodiment 4, the frequency characteristic adjustment process is executed not for each vibration instruction cycle but for each control cycle.
[0238] Therefore, even if the frequency indicated by the current vibration instruction data changes from the frequency indicated by the previous vibration instruction data, the processor 202 can execute the frequency characteristic adjustment process for each frequency in the process of the change. Thus, for example, even when the frequency is gradually changed from 50 Hz to 150 Hz, since the frequency characteristic adjustment corresponding to the vicinity of the frequency 100 Hz during the change can be executed, in Embodiment 4, even without executing the clamp adjustment process, the change in the unintended behavior during the gradual change of the frequency can be suppressed, and an appropriate amplitude value corresponding to the frequency can be determined for each control cycle.
[0239] All the embodiments disclosed herein should be considered illustrative in all respects and not restrictive. The scope of the present invention is shown not by the above description but by the claims, and it is intended that all modifications within the meaning and scope equivalent to the claims are included.
Explanation of Reference Numerals
[0240] 10 Vibration control system, 110, 114 Vibration instruction data, 101, 202 Processor, 100 Game device, 102, 203 Non-volatile memory, 102P2 Game program, 102P1 System program, 203P MCU program, 103, 204 Volatile memory, 103B1 Data area, 103B2, 204B3 Operation data area, 103B3, 204B1 Vibration instruction data area, 104, 207 Communication interface, 105 Vibration file, 116A, 116B Vibration instruction data, 200 Game controller, 204B2 Control data area, 204V1 Current amplitude data area, 204V2 Current frequency data area, 204V3 Current phase data area, 204V4 Previous frequency data area, 204V5 Previous phase data area, 205 Amplifier, 206 Vibration motor, 208 Acceleration sensor, 209 Gyro sensor, 210 Operation switch, D1~D3 Voltage value, Rw, Rw1~Rw3 Reference waveform, T11~T14, T21~T26, T31~T310 Timing.
Claims
1. A vibration control system for a game system having a vibration motor, An impact event detection means for determining whether or not an impact event has occurred, Based on the detection of the occurrence of the shock event by the shock event detection means, a first vibration instruction data generation means generates vibration instruction data for vibrating the vibration motor by specifying a desired frequency, an amplitude corresponding to the maximum input voltage of the vibration motor or the maximum output voltage of the amplifier controlling the vibration motor, and a period of two wavelengths or less of the frequency. A vibration control system comprising: a first vibration control means for controlling the vibration motor using control data generated based on vibration instruction data corresponding to the aforementioned impact event.
2. The vibration control system according to claim 1, wherein the first vibration instruction data generation means specifies a period of one wavelength or less of the frequency.
3. A second vibration instruction data generation means for generating vibration instruction data to stop the vibration of the vibration motor, The vibration control system according to claim 1, further comprising: a second vibration control means that, after vibration control based on vibration instruction data corresponding to the impact event, controls the vibration motor using control data generated based on vibration instruction data for stopping the vibration motor.
4. A normal event detection means for determining whether or not a normal event other than the aforementioned impact event has occurred, A third vibration instruction data generation means generates vibration instruction data for vibrating the vibration motor, based on the detection of the occurrence of the normal event by the normal event detection means, by specifying a desired frequency, a desired amplitude, and a period exceeding two wavelengths of the frequency. The vibration control system according to claim 3, further comprising: a third vibration control means for controlling the vibration motor using control data generated based on vibration instruction data corresponding to the aforementioned normal event.
5. The vibration control system according to claim 4, wherein the second vibration control means controls the vibration motor using control data generated based on the vibration instruction data for stopping, after vibration control based on vibration instruction data corresponding to the normal event.
6. The vibration control system according to claim 4, wherein the first vibration control means functions as the second vibration control means by specifying vibration instruction data with an amplitude of zero when neither the shock event nor the normal event is detected.
7. The vibration control system according to claim 3, wherein the second vibration control means outputs control data to the vibration motor such that the amplitude gradually decreases from the value at the end of the vibration control, during a first period after the completion of vibration control based on vibration instruction data corresponding to the impact event.
8. The vibration control system according to claim 7, wherein the second vibration control means outputs control data to the vibration motor at each of the multiple time points in the first period, which reduces the amplitude as time progresses and advances the phase as time progresses.
9. The vibration control system according to any one of claims 1 to 8, wherein the vibration instruction data corresponding to the shock event specifies a wavelength greater than one wavelength and a period of 50 msec or less.
10. The vibration control system according to claim 3, wherein the second vibration control means outputs control data to the vibration motor such that the vibration stops within one cycle of the vibration instruction cycle for the vibration motor.
11. The vibration control system according to claim 1, wherein the first vibration control means generates interpolated amplitude data with a shorter cycle than the instruction cycle of the vibration instruction data corresponding to the impact event, based on vibration instruction data corresponding to the impact event, and outputs the generated interpolated amplitude data to the vibration motor.
12. The vibration control system according to claim 11, wherein the first vibration control means generates control data for the short cycle so as to gradually approach the amplitude indicated by vibration instruction data corresponding to the current shock event from the previous amplitude.
13. The first vibration control means includes a determination means for determining that the previous amplitude was zero, The vibration control system according to claim 12, wherein when the determination means determines that the previous amplitude was zero, control data is generated to gradually approach the amplitude indicated by the vibration instruction data corresponding to the current impact event from the previous amplitude, and control data corresponding to the amplitude indicated by the vibration instruction data corresponding to the current impact event is generated.
14. The system further includes frequency characteristic data storage means for storing frequency characteristic data relating to the voltages that are permissible to input to the vibration motor at each frequency, or the voltages that are permissible to output by the amplifier at each frequency. The vibration control system according to claim 1, wherein the first vibration control means determines the allowable voltage by referring to the frequency characteristic data based on the frequency indicated by the vibration instruction data corresponding to the impact event, and determines the amplitude using the amplitude indicated by the vibration instruction data corresponding to the impact event and the determined allowable voltage.
15. The vibration control system according to claim 14, wherein the frequency characteristic data is data showing the ratio of the voltage that is permissible to input or the voltage that is permissible to output at each frequency to the maximum input voltage or the maximum output voltage.
16. The vibration control system according to claim 1, wherein the first vibration instruction data generation means detects that the impact event has occurred when a predetermined object collides with the game during gameplay.
17. A program used in a vibration control system in a game system having a vibration motor, In the computer system, Steps to determine whether or not a shock event has occurred, Based on the detection of the occurrence of the impact event in the aforementioned determination step, the steps include: generating vibration instruction data to vibrate the vibration motor by specifying a desired frequency, an amplitude corresponding to the maximum input voltage of the vibration motor or the maximum output voltage of the amplifier controlling the vibration motor, and a period of two wavelengths or less of the frequency; A program that performs the steps of controlling the vibration motor using control data generated based on vibration instruction data corresponding to the aforementioned impact event.
18. The program according to claim 17, wherein in the step of generating vibration instruction data corresponding to the shock event, a period of one wavelength or less of the frequency is specified.
19. The program is installed on the computer system. The steps include generating vibration instruction data to stop the vibration of the vibration motor, The program according to claim 17, further comprising the steps of: controlling the vibration motor using control data generated based on vibration instruction data for stopping the vibration of the vibration motor, after vibration control based on vibration instruction data corresponding to the impact event.
20. The program is installed on the computer system. The step of determining whether or not a normal event other than the aforementioned shock event has occurred, In the step of determining whether the above-mentioned normal event has occurred, based on the detection of the occurrence of the above-mentioned normal event, the step of generating vibration instruction data to vibrate the vibration motor by specifying a desired frequency, a desired amplitude, and a period exceeding two wavelengths of the above frequency, The program according to claim 19, further comprising the step of controlling the vibration motor using control data generated based on vibration instruction data corresponding to the aforementioned normal event.
21. The program according to claim 20, wherein the step of controlling the vibration motor using control data generated based on vibration instruction data for stopping the vibration of the vibration motor includes, after vibration control based on vibration instruction data corresponding to the normal event, the step of controlling the vibration motor using control data generated based on vibration instruction data for stopping the vibration.
22. The program according to claim 20, wherein the step of controlling the vibration motor using control data generated based on vibration instruction data corresponding to the shock event includes the step of specifying vibration instruction data with an amplitude of zero if neither the shock event nor the normal event is detected.
23. The program according to claim 19, wherein the step of controlling the vibration motor using control data generated based on vibration instruction data for stopping the vibration of the vibration motor includes the step of outputting control data to the vibration motor such that the amplitude gradually decreases from the value at the end during a first period after the vibration control based on vibration instruction data corresponding to the shock event has been completed.
24. The program according to claim 23, wherein the step of controlling the vibration motor using control data generated based on vibration instruction data for stopping the vibration of the vibration motor includes the step of outputting control data to the vibration motor at each of the multiple time points in the first period, which decreases the amplitude as time progresses and advances the phase as time progresses.
25. The program according to any one of claims 17 to 24, wherein the vibration instruction data generated based on the detection of the occurrence of the aforementioned shock event specifies a wavelength greater than one wavelength and a period of 50 msec or less.
26. The program according to claim 19, wherein the step of controlling the vibration motor using control data generated based on vibration instruction data for stopping the vibration of the vibration motor includes the step of outputting control data to the vibration motor such that the vibration stops within one cycle of the vibration instruction cycle for the vibration motor.
27. The step of controlling the vibration motor using control data generated based on vibration instruction data generated based on the detection of the occurrence of the shock event is shorter than the instruction cycle of the vibration instruction data generated based on the detection of the occurrence of the shock event. The program according to claim 17, comprising the steps of generating interpolated amplitude data for one cycle and outputting the generated interpolated amplitude data to the vibration motor.
28. The program according to claim 27, wherein the step of controlling the vibration motor using control data generated based on vibration instruction data generated based on the detection of the occurrence of the shock event includes the step of generating the control data for the short cycle so that the amplitude gradually approaches the amplitude indicated by the vibration instruction data generated based on the detection of the occurrence of the current shock event from the amplitude of the previous event.
29. The step of controlling the vibration motor using control data generated based on vibration instruction data generated based on the detection of the occurrence of the aforementioned shock event is: The step of determining that the previous amplitude was zero, The program according to claim 28, wherein in the step of determining that the previous amplitude was zero, when it is determined that the previous amplitude was zero, the program does not generate control data to gradually approach the amplitude indicated by the vibration instruction data generated based on the detection of the occurrence of the current shock event from the previous amplitude, but rather generates control data corresponding to the amplitude indicated by the vibration instruction data generated based on the detection of the occurrence of the current shock event.
30. The program according to claim 17 or 19, wherein the step of controlling the vibration motor using control data generated based on vibration instruction data generated based on the detection of the occurrence of the shock event includes the steps of determining the permissible voltage by referring to frequency characteristic data relating to the voltage that is permissible to input to the vibration motor or the voltage that is permissible to output by the amplifier at each frequency, based on the frequency indicated by the vibration instruction data generated based on the detection of the occurrence of the shock event, and determining the amplitude using the amplitude indicated by the vibration instruction data generated based on the detection of the occurrence of the shock event and the determined permissible voltage.
31. The program according to claim 30, wherein the frequency characteristic data is data showing the ratio of the voltage that is permitted to be input or the voltage that is permitted to be output at each frequency to the maximum input voltage or the maximum output voltage.
32. The program according to claim 17 or 19, wherein the step of generating vibration instruction data based on the detection of the occurrence of the impact event includes the step of detecting that the impact event occurred when a predetermined object collides with it during game progression.
33. A method used in vibration control systems for vibration motors, The method described above is performed by one or more processors, Steps to determine whether or not a shock event has occurred, Based on the detection of the occurrence of the impact event in the aforementioned determination step, the steps include: generating vibration instruction data to vibrate the vibration motor by specifying a desired frequency, an amplitude corresponding to the maximum input voltage of the vibration motor or the maximum output voltage of the amplifier controlling the vibration motor, and a period of two wavelengths or less of the frequency; A method comprising the steps of controlling the vibration motor using control data generated based on vibration instruction data generated based on the detection of the occurrence of the aforementioned impact event.
34. A game program used in a game system having a vibration motor, On the computer, Steps to determine whether or not a shock event has occurred, Based on the detection of the occurrence of the impact event in the aforementioned determination step, the steps include: generating vibration instruction data to vibrate the vibration motor by specifying a desired frequency, an amplitude corresponding to the maximum input voltage of the vibration motor or the maximum output voltage of the amplifier controlling the vibration motor, and a period of two wavelengths or less of the frequency; A game program that performs the steps of outputting vibration instruction data to vibrate the vibration motor.