Connection problems or incorrect MMI code - what to do. Audio equipment

Almost every user iTunes faced with the fact that the program refused to perform any action and showed a pop-up window with the number of the error that occurred ...

What do these iTunes errors mean and how to solve the problems that have arisen - more on that below ...

Cause of error 1: iTunes version too old or the firmware does not match the device.

Solution for error 1: Update iTunes to the latest version, download the firmware again (make sure you download the version of the software for the correct device).

Cause of error 2: The downloaded firmware is not packaged correctly.

Solution for error 2: Most likely, you are trying to install custom firmware (not the original assembly). Just download the original firmware, or use third-party software to install custom firmware.

Cause of error 3: This error the user can observe the completion of the iPhone, iPad firmware, which may indicate a faulty modem inside the device.

Solution for error 3: In fact, the error is similar to error -1, and if the latter is corrected by the recovery mode, then error No. 3 can be solved only in service center by replacing the modem.

Cause of error 5: The firmware is not installed in the mode for which it is intended. (DFU Mode/Recovery Mode).

Solution for error 5:

Cause of error 6: Firmware installation error due to corrupted Boot/Recovery logo (occurs when installing custom firmware). Solution for error 6: Download the original firmware, or try installing in different modes (DFU Mode/Recovery Mode).
Cause of error 8: iTunes can't install firmware because it doesn't fit this device(for example, install firmware from iPod Touch on the iPhone).

Solution for error 8: Download the original firmware for your device model.

Cause of error 9: Kernel Panic. Critical error kernels. Analog blue screen Windows. It may occur when data transmission over the cable is interrupted at the time of installation. Or when using poorly assembled custom firmware.

Solution for error 9: Check the USB port and connector on iPhone/iPad/iPod Touch.

Cause of error 10: No LLB found in the firmware ( low level Bootloader), installation is not possible.

Solution for error 10: Rebuild custom firmware or use the original one.

Cause of error 11: Some of the files were not found in the firmware.

Solution for error 11: Rebuild custom firmware or use the original one.

Cause of error 13: The cable or USB port is damaged. Either beta iOS version trying to install from under Windows.

Solution for error 13: Change USB and cable. Disabling USB 2.0 in the BIOS can also help.

Cause of error 14: Broken firmware file. Or a problem with the cable or USB port.

Solution for error 14: Disable your antivirus. Change USB and cable. Try the original firmware.

Cause of error 17: Trying to update non-original firmware (custom).

Solution for error 17: In this case, you need to restore the device from DFU or Recovery Mode.

Cause of error 20: The device is in Recovery Mode.

Solution for error 20: In this case, you need to enter DFU Mode.

Cause of error 26: Errors when compiling the firmware.

Solution for error 26: Download another firmware.

Cause of error 27 and 29: An iTunes error that occurs in older versions of the program.

Solution for error 27 and 29: Update iTunes to the latest version.

Cause of error 28: Malfunction of the 30-pin/Lightning cable or connector in the device.

Solution for error 28: Repair at a service center or replace the 30-pin/Lightning cable.

Cause of error 34: There is not enough space to install the software (on the hard disk).

Solution for error 34: Free up some space for installing the software (on the drive where iTunes is installed).

Cause of error 35: Incorrect folder permissions (the problem occurs on Mac OS).

Solution for error 35: In terminal.app enter:
sudo chmod -R 700 /Users//Music/iTunes/iTunes Media
, where is the username.

Cause of error 39: The error occurs while syncing photos.

Solution for error 39: Several of your photos cause this error, you need to find them using the exclusion from synchronization method.

Cause of error 40, 306, 10054: Problems connecting to the server.

Solution for error 40, 306, 10054: It is necessary to disable anti-virus software, proxy, clear the browser cache.

Cause of error 54: Occurs when purchases are transferred from the device to iTunes.

Solution for error 54: You can try a number of things:

  • iTunes > store > Authorize this PC
  • Delete C:\Documents and Settings\All Users\Application Data\Apple Computer\iTunes\SC Info
  • Exclude music from synchronization by deleting the folder (then you can return the folder to its place)
Cause of error 414: The content is intended for persons over 17 years of age.

Solution for error 414: Agree to such policies or change your date of birth in your account settings.

Reason for error 1004: Temporary problems with the Apple server.

Solution for error 1004: Flash later.

Reason for error 1008: Apple ID has invalid characters.

Solution for error 1008: To avoid such an error, you must use only Latin letters and numbers in your Apple ID.

Cause of error 1011, 1012: iPhone/iPad modem problem.

Solution for error 1011, 1012: Hardware problem, needs repair.

Cause of error 1013, 1014, 1015: When checking the firmware, after updating, a mismatch error occurred.

Solution for error 1013, 1014, 1015: You need to download the TinyUmbrella utility. Use the Kick Device Out of Recovery function in it.

Reason for error 1050: Apple activation servers are temporarily unavailable.

Solution for error 1050: Activate the device after a while.

Reason for error 1394: The operating system files of the device are corrupted.

Solution for error 1394: Restore the device or try to jailbreak again if the error appeared after it.

Cause of error 14**: Cable communication error.

Solution for error 14**: Either the firmware file is broken (you need to download another one), or the usb cable is broken.

Cause of error 1600, 1611: The error occurs when installing custom firmware via DFU mode.

Solution for error 1600, 1611: Try to install via Recovery Mode.

Reason for error 1609:

Solution for error 1609:

Reason for error 1619: iTunes is too old for your device.

Solution for error 1619: Update iTunes to the latest version.

Cause of error 1644: The firmware file is accessed third party programs.

Solution for error 1644: Restart your computer, turn off antiviruses if you are not working with the firmware file yourself.

Cause of error 2001: The error occurs on Mac OS. Problem with drivers.

Solution for error 2001: Update MacOS.

Reason for error 2002: Third-party processes work with iTunes, thereby blocking access.

Solution for error 2002: If it's not an antivirus, then restart your computer.

Cause of error 2003: Problems with USB port.

Solution for error 2003: Use a different USB port.

Cause of error 2005: Problems with the data cable.

Solution for error 2005: Use a different data cable.

Cause of error 2502 and 2503: Installer errors due to limited access to temporary files. Found on Windows 8.

Solution for error 2502 and 2503: The problem is solved by adding full user access to the C:\Windows\Temp folder. This is done as follows:

  • press right click mouse over the folder C:\Windows\Temp;
  • go along the path "Properties - Security - Edit" and select your user;
  • check the box next to "Full access", after you need to save the changes.
Cause of error 3000, 3004, 3999: Error accessing the Apple server.

Solution for error 3000, 3004, 3999: Access blocked by some program. For example antivirus. Disable them, reboot.

Cause of error 3001, 5103, -42110: iTunes can't download the video due to hash errors.

Solution for error 3001, 5103, -42110: Update iTunes
Delete the SC Info folder:

  • Win7 - C:\Documents and Settings\All Users\Application Data\Apple Computer\iTunes
  • Vista - C:\Program Data\Apple Computer\iTunes
  • Mac OS - /users/Shared/SC Info
Reason for error 3002, 3194: There are no hashes stored on the server. (Apple or Saurika).

Solution for error 3002, 3194: Update to a stable firmware version. Remove line: 74.208.105.171 gs.apple.com from hosts file in:

  • Win - C:\Windows\System32\drivers\etc\hosts
  • Mac OS - /etc/hosts
Turn off antiviruses, try to restore via shift. Also, an error may occur when trying to roll back to a previous version of iOS. Downgrade is not possible lately, feel free to upgrade on latest version iOS. A complex error, the explanations for which were highlighted in a separate article -.
Cause of error 3123: Problems authorizing a computer in iTunes.
Reason for error 3195: Error receiving SHSH.

Solution for error 3195: Try updating the firmware again.

Reason for error 5002: Payment refusal.

Solution for error 5002: Look for errors in the completed bank card details.

Cause of error 8008, -50, -5000, -42023: The firmware download session has expired.

Solution for error 8008, -50, -5000, -42023: Delete the Downloads folder in your iTunes folders media.

Cause of error 8248: The problem occurs if plug-ins for iTunes are installed that are incompatible with new versions of the program.

Solution for error 8248: Remove iTunes plugins. It often happens that the problem is in the Memonitor.exe process, close it.

Cause of error 9006: Something is blocking the download of the firmware.

Solution for error 9006: Download the firmware from another place, or solve the problem with antiviruses.

Reason for error 9807: Something is blocking verification of signatures and certificates.

Solution for error 9807: Solve the problem with antiviruses.

Reason for error 11222: Access blocked.

Solution for error 11222: Disable your firewall and antivirus.

Cause of error 13014, 13136, 13213: Something is interfering with iTunes.

Solution for error 13014, 13136, 13213: Update iTunes, restart your computer, turn off your antivirus software. The problem should be gone.

Cause of error 13001: The media library file is corrupted.

Solution for error 13001: Delete iTunes library files.

Cause of error 20000: An error may occur when using a non-standard windows themes.

Solution for error 20000: Install a default Windows theme.

Reason for error -39: iTunes cannot download music from iTunes Store.

Solution for error -39:

Cause of error -50: I'm having trouble connecting to the itunes.apple.com server.

Solution for error -50: Update iTunes. Relogin your account. Turn off your antivirus software.

Reason for error -3259: Connection timeout exceeded.

Solution for error -3259: Update iTunes. Check if you have an internet connection. Delete pending downloads, logging out/logging in to your iTunes account may help. If it doesn't help, try restarting your computer.

Reason for error -9800, -9812, -9815, -9814: The system time and date are incorrectly set.

Solution for error -9800, -9812, -9815, -9814: Set, in the system settings, correct date and time.

Cause of error 0xE8000022: Corrupted iOS files.

Solution for error 0xE8000022: Restore firmware.

Cause of error 0xE8000001, 0xE8000050:

Solution for error 0xE8000001, 0xE8000050: Reinstall the AppSync tweak from Cydia.

Cause of error 0xE8008001: The problem occurs when installing applications on a jailbroken device.

Solution for error 0xE8008001: Install the AppSync tweak from Cydia.

Cause of error 0xE8000013: Synchronization error.

Solution for error 0xE8000013: Synchronize your device again.

Cause of error 0xE8000065: Mistake in operating system.

Solution for error 0xE8000065: Restart your computer, use a different USB port. If it does not help, then the problem is in iTunes and you will need to restore the firmware.

If you did not find the answer to your question or something did not work out for you, and there is no suitable solution in the comment below, ask a question through our

Edit> Preferences> Audio Hardware (Edit> Preferences> Audio Hardware). The Audio Hardware tab is intended for managing hardware audio devices. When audio equipment is connected, this dialog box loads the equipment settings for of this type devices such as default input, default output, master clock, latency, and sample rate.
Device Class: select driver for sound card which we plan to use. On Windows, ASIO drivers are supported by professional cards and MME drivers are usually supported by standard cards. On Mac OS CoreAudio, drivers are supported by both professional and standard cards.
It is preferable to use ASIO and CoreAudio drivers as they provide better performance and lower latency. You can also monitor audio during recording and instantly monitor volume, panning and effects during playback.
*This option is important, because if we are using a regular audio codec, and if ASIO driver is selected in this paragraph, instead of MME. Then on the timeline when you click the play button, the playback will not start.
Default Input: No input signal (No Input).
*If you have playback on the timeline at an increased speed (or playback and movement of the playhead is jumpy, the sound stutters, etc.), and the error appears: Audio hardware I/O overloaded at 00:00:00:001 in " Adobe Player".

Or we get the message: MME device internal error. Open audio hardware settings?
Then when the Device Class is set: MME (and not ASIO), select from the drop-down list, Default Input: No input signal (Default Input: No Input), instead of Digital audio (S / PDIF) (Sound Blaster X-Fi Xtreme Audio) , or Microphone (Realtek High Definition Audio) (Not working) / Microphone (Realtek High Definition Audio) (Not working), or FrontMic (Realtek High Definition Audio) (Not working).


Default Output:

Master Clock Generator. For Master Clock, select the input or output to which you want to synchronize other digital audio equipment (for accurate sample matching).
Latency. For I/O Buffer Size (ASIO and CoreAudio) or Latency (MME), specify the smallest value possible without audio skipping. The ideal value depends on the speed of the system, so it must be found experimentally.

Select the sample rate for the audio hardware.
*If you have a frequency other than 48kHz, or if you select Default Input: Microphone (Realtek High Definition Audio), there will be two values: input 44100Hz / output 96000Hz then there may be problems with playback on the timeline Adobe software Premiere Pro CC 2015.
Click on the button: Settings... (Settings). A window will appear: Bookmarked Sound - Playback. Here you can select the playback device whose settings you want to change.

Bookmark: Record.

Bookmark: Sounds. The sound scheme sets the sounds that accompany events in the operating room. Windows system and programs. You can choose one of the existing schemes or create a new one.

Bookmark: Communication. Windows may turn down the volume various sounds when using a computer to talk on the phone.

Output Mapping- here you can specify the target speaker in your computer's audio system for each supported audio channel.


*Settings for CoreAudio devices with low latency, supports the following modes: input only, output only, or full duplex / Master Clock. You can change properties such as the Main Clock Source (MOTU, SPDIF and ADAT) and I/O Buffer Size (low latency, 32 samples).
*This release of Adobe Premiere Pro incorporates the powerful audio engine from Adobe Audition to provide more convenient and powerful audio editing. Other new features have also been implemented: more quick setup voice-over recording, improved multi-channel audio export, and more intuitive user interface for audio routing. The new audio routing interface gives you more control over the process of visually assigning output channels to standard, mono, adaptive, and 5.1 tracks. The Edit Clip workflow has implemented a matrix to map the available audio channels in source file with channels and track objects in a clip. In addition, Premiere Pro now supports a wide range of plug-and-play audio hardware, including ASIO and MME (Windows) and CoreAudio (Mac), and has preloaded configurations for these types of devices.

At the request of the program, the sound subsystem can use three notification options: setting the program event object (event), calling the specified program function (callback), or sending a message to the specified window or task (thread). In the first variant, the program receives information only about the very fact of some event in the sound subsystem and must itself find out what exactly happened; in the second and third variants, the event code and clarifying information are transmitted.

The sound subsystem sends three types of event notifications to the program: successful opening of the device, successful closing of the device, and completion of processing the next buffer from the driver's queue. Strictly speaking, only last event; the first two occur immediately after the successful opening and closing of the device and are passed to the program before returning from the corresponding interface functions.

Notification by sending a message to a window or task

The sound subsystem sends a Windows message to the specified window or task, the code of which reflects the event, passing in the message parameters the key of the open sound device and Additional information about the event. The message is sent asynchronously using functions post message or PostThreadMessage and is selected from the window or task queue along with other Windows messages.

The names of constants for message codes look like MM_WxM_event, where x- device type (letter I- for an input device or O- for the output device), and event- event type:

Messages MM_WxM_OPEN and MM_WxM_CLOSE sent to both types of devices, and MM_WIM_DATA and MM_WOM_DONE- only input or output devices, respectively.

In all messages parameter wParam passes the key of the device that generated the event. In messages DATA/DONE parameter lParam passes the header pointer of the returned audio buffer.

Sound subsystem messages do not require a return value from the function that handles them.

Program function call notification

The sound subsystem calls the specified program function, passing the code and event parameters in its arguments. The called function prototype looks like this:

void CALLBACK CallbackProc(HWAVEx Handle, UINT Msg, DWORD Instance, DWORD Param1, DWORD Param2);

Handle- sound device key. Has type HWAVEIN or HWAVEOUT; generic type is allowed HWAVE.

msg- event code. The event code constants have the same names as the window/task message code constants, but without the prefix MM_ (WIM_OPEN, WOM_DONE etc.). In fact, they are now defined in MMSYSTEM.H as equivalent to prefixed constants MM_ however, this should not be expected in the future.

Instance- 32-bit information word, specified by the program when opening the device. The sound subsystem does not use this value in any way, but only passes it on each function call.

Param1, Param2- event parameters. For events OPEN and CLOSE meaning Param1 equals zero; for events DATA and DONE this parameter passes the heading pointer of the returned audio buffer. Meaning Param2 in the current implementation is always zero.

The function can be called in the context of an interrupt handler, so it can only safely use a limited set of Windows features: EnterCriticalSection, LeaveCriticalSection, midiOutLongMsg, midiOutShortMsg, OutputDebugString, post message, PostThreadMessage, SetEvent, timeGetSystemTime, timeGetTime, timeKillEvent, timeSetEvent. Calls to other system functions, as well as to the functions of the sound subsystem, can cause unpredictable consequences.

To call the function, the sound subsystem creates a separate task (thread) with a higher (ABOVE_NORMAL) priority. Unlike message passing, which is processed on a first-come, first-served basis, a function call occurs in parallel with the work of other tasks in the process, so care must be taken to synchronize the access of the function and other tasks to shared variables and data structures.

The helper task is created once and exists until the process completes. The sound subsystem calls notification functions from this task for all devices that will be open during the lifetime of the process.

A set of interface functions for audio devices

In the future, we will adhere to the universal function naming system, indicating only the semantic part of the name and omitting the prefix containing the type and “orientation” of the device. For example, when talking about the GetDevCaps function, we will mean two functions - waveInGetDevCaps and waveOutGetDevCaps, explaining only their differences for input and output devices. This will require the reader to "construct" the full function name on a case-by-case basis, but will make the description broader and more systematic. In the function prototype, the prefix will be denoted by the sequence " xxx».

The first parameter of most functions is the key (handle) of the open sound device, which has the type HWAVEIN or HWAVEOUT; in the prototype, its type is denoted HWAVEx. As already mentioned, audio device keys can be stored in variables of a compatible type HWAVE.

List of interface functions

Query number of devices

Query device settings and capabilities

Opening the device

Closing the device

Preparing (fixing in memory) an audio buffer

Freeing (unfixing) the audio buffer

AddBuffer/Write

Passing the next buffer to the device driver

Stop recording/playback

Start recording/playback

Reset flow

SetVolume / GetVolume

Setting/requesting playback volume

SetPitch/GetPitch

Setting/requesting the pitch during playback

SetPlaybackRate / GetPlaybackRate

Setting/requesting the playback speed

Request device number by key

Query the text of the error message by code

Sending a custom message to the driver

Values ​​Returned by Interface Functions

With rare exceptions, all audio interface functions return a result like MMRESULT, equivalent to type UINT. Meaning MMSYSERR_NOERROR, equal to zero in the current implementation, means successful execution of the function, any other value indicates an error. Error code constants are prefixed MMSYSERR_(general multimedia subsystem error) and WAVERR_(Wave device driver error):

MMSYSERR_BADDEVICEID

Invalid device number

MMSYSERR_NOTENABLED

Driver not activated

MMSYSERR_ALLOCATED

Device is busy with another application

MMSYSERR_INVALHANDLE

Invalid public device key

MMSYSERR_NODRIVER

Driver missing

Not enough memory

MMSYSERR_NOTSUPPORTED

The requested feature is not supported.

MMSYSERR_BADERRNUM

Error code out of range

MMSYSERR_INVALFLAG

Invalid flag

MMSYSERR_INVALPARAM

Invalid parameter

MMSYSERR_HANDLEBUSY

An operation is performed on the key from another task

Undefined error

MMSYSERR_NODRIVERCB

Driver did not follow notification (callback)

WAVERR_BADFORMAT

Invalid or unsupported stream format

WAVERR_STILLPLAYING

Recording in progress or playback

WAVERR_UNPREPARED

Buffer not prepared

The device only works in synchronous mode

GetDevCaps - request parameters and device capabilities

MMRESULT xxxGetDevCaps(UINT DevId, LPWAVExCAPS Caps, UINT CapsSize);

Serves to determine the parameters and capabilities of the device.

DevId- device number starting from zero, or the key of a previously opened device, or a constant WAVE_MAPPER. In the latter case, the parameters of the standard system device are returned.

Caps- a pointer to a structure of type WAVEINCAPS or WAVEOUTCAPS (there are special types LPWAVEINCAPS and LPWAVEOUTCAPS).

CapsSize- the size of the structure in bytes.

Upon successful completion, the function fills the fields of the structure passed by the pointer with device parameters. If parameters were requested wave mapper, then the name of the redirection service is returned as the device name.

Open - device opening

MMRESULT xxxOpen(LPHWAVEx ForHandle, UINT DevId, LPCWAVEFORMATEX Format, DWORD Callback, DWORD Instance, DWORD OpenFlags);

ForHandle- pointer type variable HWAVEIN or HWAVEOUT(pointer type - LPHWAVEIN or LPHWAVEOUT), into which, upon successful completion of the operation, the key of the open device is written.

DevId- device number starting from zero, or the key of a previously opened device, or a value WAVE_MAPPER. In the latter case, the remapping service selects a device that supports the given format, and the search starts from the standard system device.

Format- pointer to a WAVEFORMATEX type structure that describes the required stream format.

callback- an object to which driver notifications about the execution of the requested operations will be sent. It is set by the key (handle) of the window or event, by the function pointer, or by the task identifier (thread id).

Instance- A 32-bit information word that will be passed by the driver in the call parameters of the notification function. For example, when developing a generic interface with sound devices, this could be a pointer to a device descriptor (struct or class object).

Open Flags- flags of modes of opening and operation of the device:

The driver will not notify the program that operations have been performed. This mode is used by default

Parameter callback is the key of the event object (event handle)

Parameter callback is the task identifier (thread id)

Parameter callback is the window handle

CALLBACK_FUNCTION

Parameter callback is a function pointer

WAVE_FORMAT_QUERY

Format polling mode. The driver only checks if the specified device can be opened with the requested format and modes, and returns the appropriate result code. In this mode, the parameter ForHandle may be null ( NULL)

WAVE_FORMAT_DIRECT

Disables Wave Mapper and ACM from participating in stream format conversion. All communication is between the driver and the application only.

Allows the device to be opened in synchronous mode. For fully synchronous devices, this flag must be specified.

Allows Wave Mapper and ACM to interfere with audio communication between the program and the device driver

In case of successful opening of the device (if the format polling flag was not set), the sound subsystem returns to the variable referenced by the pointer ForHandle, key (handle) of an open device.

Input devices are opened in "stop" mode, and passing sound buffers to the driver does not result in automatic start records - for this you need to call Start function. Output devices are opened immediately in playback mode, and when the first sound buffer is transferred to the driver, its playback automatically starts.

When you finish working with the device, you must close it with the Close function, otherwise the open device may “hang”. Unlike the file system, the sound subsystem in Windows is much more sensitive to errors and is not always able to track the termination of the program in order to crash sound devices.

PrepareHeader - preparing the buffer and its header for transfer to the driver

MMRESULT xxxPrepareHeader(HWAVEx Handle, LPWAVEHDR Hdr, UINT HSize);

hdr

HSize

Prepares the audio buffer for transmission to the driver. Usually preparation consists in fixing the buffer in memory so that during out-of-processor transfer (DMA) it will not be forced out (pumped out) to disk. The sound subsystem sets the flag in the header of the prepared buffer WHDR_PREPARED.

Before calling the function, the fields in the buffer header must be filled lpData, dwBufferLength, dwFlags.

For an already prepared buffer, the function does nothing and succeeds.

Write/AddBuffer - transfer of the sound buffer to the driver

MMRESULT waveOutWrite(HWAVEx Handle, LPWAVEHDR Hdr, UINT HSize); MMRESULT waveInAddBuffer(HWAVEx Handle, LPWAVEHDR Hdr, UINT HSize);

hdr- audio buffer header pointer.

HSize- the size of the header structure.

Passes the sound buffer to the driver for playback ( Write) or for writing ( AddBuffer). The buffer must be prepared with the Prepare function, otherwise the driver will refuse to accept it.

Having received the buffer, the driver resets the WHDR_DONE flag in its header, includes the header in the internal queue, and sets the WHDR_INQUEUE flag. After that, the asynchronous driver returns control to the application, continuing the parallel processing of the buffer queue on interrupts from the device; the synchronous driver returns control only after processing the buffer.

Having finished processing the next buffer, the driver removes it from the queue, resets the WHDR_INQUEUE flag, then sets the WHDR_DONE flag, after which it performs an application notification if it was requested when opening the device. The driver then continues processing the next buffer in the queue.

The application is not allowed to change any header fields until the buffer has been processed by the driver.

Because the buffer header has only one field to bind into a list, resubmitting to the driver a buffer that has already been queued results in an error.

Start/Restart - start recording/playback

MMRESULT waveInStart(HWAVEx Handle); MMRESULT waveOutRestart(HWAVEx Handle); Starts recording/playback from the current position of the stream.

With an active thread, the function does nothing and succeeds.

BreakLoop - interrupt the current loop

MMRESULT waveOutBreakLoop(HWAVEx Handle);

Resets the playback loop mode, if it is set. The current loop pass is played to the end, then playback continues linearly, without returning to the first loop buffer. The group of loop buffers is returned to the program as each one completes playback.

When the thread is stopped or there is no loop, the function does nothing and succeeds.

SetVolume - setting playback volume

MMRESULT waveOutSetVolume(HWAVEx Handle, DWORD Volume);

Volume- volume on the left and right channels. The low word sets the volume of the left channel, the high word sets the volume of the right. The value 0xFFFF sets the maximum volume, 0 - the minimum. For adapters that do not support independent channel volume control, the low word specifies the volume on both channels of the path.

The function sets the output level of the reproduced signal. Although the function allows 65,536 volume levels, most adapters only support 8 to 256 volume levels. In such cases, only the three to eight most significant digits of the loudness value are significant; the least significant digits are ignored. This interpretation allows you to use the same volume scale, changing only the degree of adjustment steps.

The function is only supported by adapters that have the WAVECAPS_VOLUME flag set in their properties. Separate adjustment by channels is supported only if the WAVECAPC_LRVOLUME flag is present.

SetPitch / SetPlaybackRate - setting the pitch / playback speed

MMRESULT waveOutSetPitch(HWAVEx Handle, DWORD Multiplier); MMRESULT waveOutSetPlaybackRate(HWAVEx Handle, DWORD Multiplier); Multiplier- multiplier for pitch/playback speed. The high word specifies the integer part of the multiplier, the low word specifies the fractional part. If there is a multiplier value f type double, then convert it to type DWORD it is possible by the formula:

Multiplier = (DWORD)(f * 0x10000)

The functions change the pitch or playback speed of the stream without changing the sample rate at which the stream is played. The multiplier value must be positive. By default, the multiplier is set to 1.0, which means that the stream will play at natural pitch and speed.

When you change the pitch, all sounds in the stream become higher or lower, but the duration of each sound and the total playback time are preserved. Changing the playback speed is like changing the speed of a tape in a tape recorder: all sounds become higher or lower, and the total playback time decreases or increases accordingly.

Not all sound adapters support this pair of functions; as a rule, it is implemented on specialized signal processors (DSP). Technically, the change in speed is most easily implemented, for which at the points between the available samples, intermediate samples are calculated by interpolation, following each other more or less often, which are fed to the DAC circuit. Changing the pitch requires much more complex calculations: fragments of the stream are decomposed into a Fourier series, forming a sound spectrum, then the spectrum is shifted towards high or low frequencies, after which a fragment of a new sound stream is again formed from the changed spectrum.

For adapters that support pitch and/or rate changes, the GetDevCaps function sets the WAVECAPS_PITCH and WAVECAPS_PLAYBACKRATE flags, respectively.

GetID - request device number by key

MMRESULT xxxGetID(HWAVEx Handle, LPUINT ForID);

For ID- type variable pointer UINT, which contains the device number.

The function determines the number of the device, upon opening of which the system returned the specified key. In the event that the redirection service was used when opening (value WAVE_MAPPER instead of a number or the WAVE_MAPPED flag), the function returns a value WAVE_MAPPER.

The Microsoft documentation claims that this feature is only supported for compatibility, and that it is enough to cast the key to the desired type to get the number, but this is not at all the case. The public device key is the address of a descriptor owned by the audio subsystem, and in Win32 is located in a shared memory area. The only way to get the device number by key is to use the function GetID.

GetErrorText - request a text error message by code

MMRESULT xxxGetErrorText(MMRESULT Error, LPSTR Text, UINT TextSize);

error- error code returned by one of the interface functions;

Text- pointer to a text buffer (an array of type char);

textsize- size of the text buffer in bytes.

The function enters a text description of the error with the given code into the specified buffer. The written text is terminated by a null byte. If the buffer is not large enough, then the end of the text is truncated; a null byte is written to the buffer anyway. The size of the buffer that can hold any error message is determined by the constant MAXERRORLENGTH.

Error messages are not separated by device type, so any of the possible functions is enough to request the text of any error, for example waveOutGetErrorText.

Message - send a message to the driver

MMRESULT xxxMessage(HWAVEx Handle, UINT Msg, DWORD P1, DWORD P2);

msg- code of the transmitted message.

P1, P2- message parameters.

The function is used to send a message directly to the driver. All interface functions, except for GetID and GetErrorText, are translated by the audio subsystem into messages passed to the driver; each message has two type parameters DWORD, into which interface function parameters are converted. If the device driver supports non-standard messages, they can be passed to it using the functions message. The return value is determined by the driver itself.

Disadvantages of the MME audio subsystem

In Windows 95/98, the MME subsystem and its drivers remained 16-bit, as they were in Windows 3.x. Because of this, every call to sound driver from a Win32 application is accompanied by a double change of execution mode (thunking), which, alas, leads to additional overhead costs, reaching milliseconds on Celeron-366 processors. In addition, many drivers limit the frequency of updating the ring buffer, through which the exchange takes place between the computer and the adapter, to several tens of times per second, which causes a lag (latency) in the process of sound transmission. For drivers for ISA adapters, this lag can reach tens of milliseconds; for drivers for PCI adapters, it is usually limited to a few milliseconds.

For faster sound output, especially with its real-time modification, Microsoft has developed a newer interface - DirectSound. This interface is designed to "bring" the adapter hardware to application program and allows it to almost directly record sound into the system ring buffer, reducing the maximum delays to units of milliseconds for any adapter. When working with DirectSound the program accesses the 32-bit system adapter driver (VxD) directly, bypassing switching between 32- and 16-bit execution modes.

In order to effective work interface DirectSound must be supported by the adapter's system driver. For devices whose drivers do not support DirectSound, Windows emulates the new interface "on top" of the normal MME driver, but in this case, all delays even increase due to the overhead of emulation.

Unfortunately, Microsoft has developed an extension specification DirectSound for sound VxDs only in terms of sound reproduction, acting primarily in the interests of game manufacturers. Audio recording via DirectSound is still conducted by emulation over MME.

I must say that the sound subsystem of Windows 3.x and 95/98, as well as the subsystem remote access to the network (RAS), has low error tolerance. This most often manifests itself in the fact that when a program that opens sound devices and works with them crashes, the system does not properly close (cleanup) the devices in use. As a result, in some cases, after such a crash, a reboot may be required, and until then, unlocked devices will be inaccessible to other applications. In addition, 16-bit subsystems are far less error-proof than 32-bit subsystems, so severe bugs in sound programs can crash and freeze the entire Windows system.

In Windows NT, all subsystems are natively 32-bit, so the problems described do not occur there, but audio input and output latencies are still determined by the refresh rate of the ring buffer, which is set by the specific adapter driver.

An example program using the MME interface

As an illustration, a program that implements the delay effect in real time is given. The essence of the effect is the addition of the original sound signal with its copy, delayed in time by a small amount (units-hundreds of milliseconds). A delay of up to 15-20 ms is perceived by ear as a "crushing" of the sound source; the creation of the choral effect is based on this principle. A delay of 20-50 ms is perceived as a reverberation (feeling of volume), and large delay values ​​are perceived as a normal echo.

To get the believable sound of the effects described, it is common to make several successive audio delays in which the copy of the original signal is gradually attenuated. In the above program, for simplicity, only one delay is made, and the signal copy is not attenuated.

The program is implemented in C++. In fact, it uses only general extensions from C++ (defining variables in loop headers, using structure names as type names, etc.), otherwise we can assume that it used the usual ANSI C language.

The program was developed in the MS VC++ 4.2 environment. Only the standard Windows interface is used, without any extensions from the development environment.

The program works in real time, simultaneously opening two sound devices - input and output. The filled sound buffers coming from the input device are summed up with their time-shifted copies, after which they are sent to the output device; a common set of sound buffers circulate between the input and output device.

To control the circulation of buffers, a separate worker thread is created, which is assigned the maximum priority increment. Sound devices open in work task notification mode.

Due to buffering, the sound output by the program is somewhat behind the original. The total buffering time and the number of sound buffers are set in the program parameters section. For continuous audio transfer, the number of buffers must not be less than two; acceptable stability is achieved already when using three or four buffers.

The program requires a full-duplex audio adapter that allows simultaneous operation of its ADC and DAC. Most modern adapters satisfy this condition.

Example

ComputerPress 6"2000


Sometimes MME.browser and other BROWSER system errors can be related to problems in the Windows registry. Several programs can share the MME.browser file, but when those programs are uninstalled or changed, "orphaned" (invalid) BROWSER registry entries are sometimes left behind.

Basically, this means that while the actual path to the file may have been changed, its incorrect former location is still recorded in the Windows registry. When Windows tries looking up these incorrect file references (file locations on your PC), MME.browser errors can occur. In addition, malware infection may have corrupted the registry entries associated with Microsoft Windows. Therefore, these invalid BROWSER registry entries need to be repaired to fix the root of the problem.

Manually editing the Windows registry to remove invalid MME.browser keys is not recommended unless you are PC service professional. Mistakes made while editing the registry can render your PC unusable and cause irreparable damage to your operating system. In fact, even a single comma in the wrong place can prevent your computer from booting up!

Because of this risk, we highly recommend using reliable registry cleaners such as WinThruster(Developed by Microsoft Gold Certified Partner) to scan for and repair any MME.browser-related issues. Using registry cleaning, you can automate the process of finding invalid registry entries, missing file references (like the one causing your MME.browser error), and broken links within the registry. Before each scan, an automatically created backup copy, which allows you to undo any changes with a single click and protects you from possible damage to your computer. The nicest thing is troubleshooting registry errors can drastically improve system speed and performance.


Warning: If you are not experienced user PC, we do NOT recommend editing the Windows registry manually. Incorrect use of the Registry Editor can lead to serious problems and require reinstalling Windows. We do not guarantee that problems resulting from misuse of Registry Editor can be resolved. You use the Registry Editor at your own risk.

Before manually restoring Windows registry, you need to create a backup by exporting a part of the registry related to MME.browser (eg. Microsoft Windows):

  1. Click on the button To begin.
  2. Enter " command" in search bar... DO NOT PRESS YET ENTER!
  3. Holding keys CTRL-Shift on the keyboard, press ENTER.
  4. An access dialog will be displayed.
  5. Click Yes.
  6. The black box opens with a blinking cursor.
  7. Enter " regedit" and press ENTER.
  8. In the Registry Editor, select the MME.browser-related key (eg. Microsoft Windows) you want to back up.
  9. On the menu File select Export.
  10. Listed Save to select the folder where you want to save the Microsoft Windows key backup.
  11. In field File name enter a name for the backup file, such as "Microsoft Windows Backup copy".
  12. Make sure the field Export range value selected Selected branch.
  13. Click Save.
  14. The file will be saved with .reg extension.
  15. You now have a backup of your MME.browser-related registry entry.

The next steps for manually editing the registry will not be covered in this article, as they are likely to damage your system. If you would like more information on editing the registry manually, please see the links below.

Share